Android 开发学习记录
1.先行学习
- Android 应用及其组件
-
Android UI布局 -- 通过各种的Layout控制所属View的显示位置
通过ViewGroup.LayoutParams 设置相关的View参数
-
加载布局XML资源 -- 在Activity.onCreate()回调中实现布局文件的加载,
通过setContentView()方法实现。
Q:后续建立的每一个activity中也是要建立相对应的oncreate()方法吗?还是说可以自动生成?
-
对于项目会发现,经常需要clean一下我们的项目,然后再进行rebuild
2.理解文件分布
布局文件和activity就不赘述了
- 创建的布局需要在Activity中去调用方法启动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 用于给当前 Activity 加载一个布局
setContentView(R.layout.first_layout);
}
- 创建的Activity要在AndroidMainfest.xml文件中注册才可以使用
这个是初创项目的时候就有的
其中
activity标签内添加<intent-filter>标签就是为了用来标识首先启动的Activity是哪一个
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ForTest"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<!-- 使用这个标识来标注首先启动的Activity -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
- 如果有新添加一个Activity,则直接在下面进行添加
<!-- 新Activity的声明 -->
<activity
android:name=".NewActivity"
android:exported="true">
<!-- 如果需要,可以在这里添加<intent-filter> -->
</activity>
- 如果你希望新的Activity可以通过一个特定的动作来启动,比如说点击一个URL例如
http://example.com/newactivity)时,系统会启动你的应用,并打开NewActivity。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="example.com" android:pathPrefix="/newactivity" />
</intent-filter>
3. Toast -- 提示
短小的信息提示
- 在Activity的onCreate中进行设置
- 通过
findViewById()方法来获取当前布局中的定义元素 - 调用
setOnClickListener是给这个元素注册一个监听器,用于监听是否有点击。点击触发时就会调用onClick方法。 - Toast的使用方法:通过调用它的静态方法
makeText会创建一个 Toast 对象,然后调用show方法,展示 Toast。 - 传入三个参数
第一个:Context参数 -- 上下文(Activity本身是Context 的子类)
第二个:要显示的内容
第三个:显示的时长 -- 只能选择
Toast.LENGTH_SHORT或者Toast.LENGTH_LONG。
Button bt = findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Toast.makeText(MainActivity.this,"显示内容",Toast.LENGTH_SHORT).show();
}
});
4. 在Activity中创建Menu
- 创建相关文件:res → menu → 新建一个
menu resource file,取名 main - 在这个main.xml中添加代码
<item>标签就是来创建某一个菜单项的,然后通过属性android:id来给这个菜单项设置唯一标识,通过title这个属性给菜单项指定名称。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_item" android:title="Add"/>
<item android:id="@+id/remove_item" android:title="Remove"/>
</menu>
- 显示菜单 -- 在Activity中重写
onCreateOptionsMenu()方法
显示三个点 -- Google自带的了
通过 getMenuInflater() 获取 MenuInflater 对象,然后调用他的 inflate 方法。第一个参数就是指定我们创建的 Menu 的资源,第二个参数,用与指定我们的菜单将会添加到那个 Menu 对象中,这里直接使用方法中的 menu 然后 return true,表示运行菜单显示出来,如果是 false 则创建的菜单无法显示(三个点也没有)。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
- 操作菜单 -- 用到方法
onOptionsItemSelected()
在
onOptionsItemSelected()方法中通过 item.getItemId() 来判断我们点击了那个菜单项。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"remove",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
// 但在android8 之后,我们的id就不再默认是final了(final变量在编译时被认为是常量表达式),而Switch case需要使用的是常量表达式
// 修改后的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.add_item) {
Toast.makeText(this, "add", Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == R.id.remove_item) {
Toast.makeText(this, "remove", Toast.LENGTH_SHORT).show();
}
return true;
}
- 同时在main_xml中也需要定义出菜单的图示
刚刚开始我们使用的是会报错,什么没有导入依赖巴拉巴拉的,估计是导入包不简单。
<androidx.appcompat.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent" --表示Toolbar的宽度将与其父布局的宽度相同。
android:layout_height="?attr/actionBarSize" --表示Toolbar的高度将使用系统定义的ActionBar大小。
android:background="?attr/colorPrimary"
app:layout_constraintTop_toTopOf="parent" />
app:layoutconstraintToptoTopOf="parent":这是使用ConstraintLayout布局时设置的属性。它表示Toolbar的顶部将与父布局的顶部对齐。
我们使用了
androidx.appcompat.widget.Toolbar而不是android.widget.Toolbar。这是因为androidx.appcompat.widget.Toolbar是Material Components库的一部分,它提供了更多的功能和样式选项。
5.销毁一个Activity
Activity 给我们提供了一个方法finish() 我们只要调用一下这个方法,当前的 Activity 就会销毁。
学习这个博主的juejin.cn/user/431853…