目录
一.安卓开发中的布局
1.1 介绍与用途
- 界面结构定义:布局作为用户界面(UI)的骨架,通过XML文件定义了应用界面的结构。它确定了各个UI元素如按钮、文本框、图像等的位置和排列方式。
- 视觉美感:一个良好的布局设计能够提升APP的视觉效果,吸引并保持用户的注意力。美观的界面可以让用户在使用过程中感到愉悦,从而提高用户体验。
- 信息展示:布局决定了信息的展示方式和顺序,合理的布局可以帮助用户更快地找到他们需要的信息或功能,提高操作效率。
- 适应性:良好的布局设计需要考虑不同设备的屏幕尺寸和分辨率,确保APP在不同设备上都能保持良好的显示效果和用户体验。
- 交互逻辑:布局还与APP的交互逻辑紧密相关,合理的布局可以引导用户按照开发者预设的逻辑进行操作,使得用户的行为更加符合设计意图。
- 功能性:布局不仅要考虑美观,还要考虑实用性。例如,按钮的大小和位置要方便用户点击,信息展示要清晰易懂,这些都是布局设计时需要考虑的功能因素。
- 响应式设计:现代APP开发中,布局需要支持响应式设计,即能够根据用户的交互和设备的变化自动调整布局,以适应不同的使用场景。
- 内容组织:良好的布局设计有助于内容的合理组织,使得APP的内容层次分明,用户可以直观地理解APP提供的信息和服务。
综上所述,布局在APP应用开发中扮演着至关重要的角色,其不仅影响着用户的第一印象,还直接关系到用户的使用体验和APP的成功与否。因此,开发者在设计APP时需要高度重视布局的设计和实现。
1.2 线性布局(LinearLayout)
特点: 线性布局中的子视图按照垂直或水平的线性方向排列。它支持weight属性,可以指定子视图在剩余空间中所占的比例。
适用场景: 适用于简单的布局需求,如导航栏、列表项、工具栏等。当需要将子视图按照一定方向排列时,线性布局是一个很好的选择。
常用属性:
- android:layout_width 和 android:layout_height:设置布局的宽度和高度。
- android:orientation:指定子视图排列的方向,可以是水平(horizontal)或垂直(vertical)。
- android:gravity:设置子视图的对齐方式。
- android:layout_weight:在LinearLayout中,用于指定子视图在剩余空间中的分配比例。
- android:layout_margin 和 android:padding:分别设置外边距和内边距。
示例代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:padding="20dp"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册个人信息"
android:layout_gravity="center"
android:textSize="20sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="填写姓名"
android:layout_margin="1dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入证件类型"
android:layout_margin="1dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入身份证号"
android:layout_margin="1dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入联系电话"
android:layout_margin="1dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="bottom">
<Button
android:layout_margin="10dp"
android:layout_weight="1"
android:layout_width="0dp" android:layout_height="wrap_content"
android:text="提交"/>
<Button
android:layout_margin="10dp"
android:layout_weight="1"
android:layout_width="0dp" android:layout_height="wrap_content"
android:text="重置"/>
<Button
android:layout_margin="10dp"
android:layout_weight="1"
android:layout_width="0dp" android:layout_height="wrap_content"
android:text="取消"/>
</LinearLayout>
</LinearLayout>
效果图:
1.3 约束布局(ConstraintLayout)
特点: 约束布局提供了一种灵活的方式来构建复杂的布局。它通过约束来定义视图之间的关系,支持链式布局、居中对齐等高级功能。约束布局的性能优于其他布局,因为它减少了布局嵌套。
适用场景: 适用于复杂的布局需求,如复杂的用户界面、动态布局等。约束布局是当前推荐使用的主要布局方式,例如动态表单、卡片式布局等。
常用属性:
- android:layout_width 和 android:layout_height:设置布局的宽度和高度。
- android:layout_toRightOf、android:layout_toLeftOf等:定义控件相对于其他控件的位置。
- android:layout_alignParentTop、android:layout_alignParentBottom等:定义控件相对于父布局的位置。
- android:layout_centerHorizontal、android:layout_centerVertical:设置控件在水平或垂直方向上居中。
示例代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvtile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Registration"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="Name"
android:textSize="20sp"
android:layout_marginLeft="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvtile" />
<EditText
android:id="@+id/etName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:hint="Please input your name"
app:layout_constraintBottom_toBottomOf="@+id/tvName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tvName"
app:layout_constraintTop_toTopOf="@+id/tvName" />
<TextView
android:id="@+id/tvId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="ID"
android:textSize="20sp"
android:layout_marginLeft="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvName" />
<EditText
android:id="@+id/etId"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:hint="Please input your ID"
app:layout_constraintBottom_toBottomOf="@id/tvId"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tvName"
app:layout_constraintTop_toTopOf="@+id/tvId"/>
<TextView
android:id="@+id/tvGendr"
android:text="Gender"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginLeft="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvId"
/>
<Button
android:layout_weight="1"
android:id="@+id/btnSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btnReset"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:layout_weight="1"
android:id="@+id/btnReset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reset"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btnExit"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/btnSubmit" />
<Button
android:layout_weight="1"
android:id="@+id/btnExit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/btnReset" />
<RadioGroup
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="@id/tvGendr"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/etId"
app:layout_constraintTop_toTopOf="@id/tvGendr">
<RadioButton
android:id="@+id/rbMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Male" />
<RadioButton
android:id="@+id/rbFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Female" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>
效果图:
1.3 表格布局(TableLayout)
特点: 表格布局将子视图组织成表格形式。它允许子视图跨越多行或多列,支持合并单元格。表格布局适用于需要行列对齐的布局,如表格数据展示。
适用场景: 适用于需要展示表格数据的场景,如表格列表、数据报表等。
常用属性:
- android:layout_width 和 android:layout_height:设置布局的宽度和高度。
- android:layout_gravity:设置控件在父布局中的对齐方式。
- android:layout_margin 和 android:padding:分别设置外边距和内边距。
示例代码:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="0,3"
android:gravity="center_vertical"
>
<TableRow>
<TextView />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="150dp"/>
<TextView />
</TableRow>
<TableRow>
<TextView />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 码:"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="150dp"
/>
<TextView />
</TableRow>
<TableRow>
<TextView />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登陆"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="退出"/>
<TextView />
</TableRow>
</TableLayout>
效果图:
1.4 帧布局(FrameLayout)
特点: 帧布局是一个轻量级的布局,用于叠加视图。它允许子视图重叠,通常用于覆盖层或弹出窗口。帧布局的性能优于其他布局,因为它不包含子视图的布局信息。
适用场景: 适用于需要叠加视图的场景,如弹出窗口、覆盖层等。帧布局也常用于占位符,为后续添加的视图预留空间。
常用属性:
- android:layout_width 和 android:layout_height:设置布局的宽度和高度。
- android:numColumns:设置列数。
- android:stretchColumns:设置可伸缩的列。
- android:layout_weight:在TableLayout中,用于指定行或列在剩余空间中的分配比例。
示例代码:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/FrameLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:foregroundGravity="right|bottom">
<TextView
android:layout_width="500dp"
android:layout_height="300dp"
android:background="#00ff00" />
<TextView
android:layout_width="150dp"
android:layout_height="150dp"
android:background="#ff0000" />
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#00ffff" />
</FrameLayout>
效果图:
1.5 相对布局(RelativeLayout)
特点: 相对布局允许子视图相对于彼此或父视图进行定位。它提供了高度的灵活性,可以通过属性指定子视图之间的相对位置。相对布局支持嵌套,但嵌套过深会影响性能。
适用场景: 适用于需要高度定制化布局的场景,如复杂的用户界面。相对布局可以减少布局嵌套,提高性能。
常用属性:
- android:layout_width 和 android:layout_height:设置布局的宽度和高度。
- app:layout_constraintLeft_toLeftOf、app:layout_constraintRight_toRightOf等:定义控件之间的约束关系。
- app:layout_constraintTop_toTopOf、app:layout_constraintBottom_toBottomOf等:定义控件与父布局或其他控件的约束关系。
- app:layout_constraintHorizontal_bias、app:layout_constraintVertical_bias:设置控件在水平或垂直方向上的偏移比例。
示例代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="居中"
android:layout_centerInParent="true"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左上"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右上"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左下"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右下"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中左上"
android:layout_toLeftOf="@id/button3"
android:layout_above="@id/button3"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中右上"
android:layout_toRightOf="@id/button3"
android:layout_above="@id/button3"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中左下"
android:layout_toLeftOf="@id/button3"
android:layout_below="@id/button3"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="中右下"
android:layout_toRightOf="@id/button3"
android:layout_below="@id/button3"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上"
android:layout_centerInParent="true"
android:layout_above="@id/button3"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下"
android:layout_centerInParent="true"
android:layout_below="@id/button3"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左"
android:layout_toLeftOf="@id/button3"
android:layout_centerInParent="true"
android:textAllCaps="false"
/>
<Button
android:id="@+id/button13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右"
android:layout_toRightOf="@id/button3"
android:layout_centerInParent="true"
android:textAllCaps="false"
/>
</RelativeLayout>
效果图:
二、UI界面交互功能的实现方法
2.1 按钮点击事件
实现方法: 按钮点击事件可以通过设置OnClickListener来实现。在onClick方法中编写点击事件的处理逻辑。
示例代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="课程名称"
android:textSize="20sp" />
<Spinner
android:id="@+id/spCourse"
android:spinnerMode="dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnSubmit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户选择了"/>
</LinearLayout>
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private String[] courses={"Android入门","Android高级","Android开发技术","Java入门"};
private Spinner spCourse;
private Button btnSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spCourse=findViewById(R.id.spCourse);
btnSubmit=findViewById(R.id.btnSubmit);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,courses);
spCourse.setAdapter(adapter);
spCourse.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
String item = courses[position];
Toast.makeText(MainActivity.this,"您选择:"+item,Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Object item=spCourse.getSelectedItem();
Toast.makeText(MainActivity.this,item.toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
效果图:
2.2 列表项点击事件
列表项点击事件可以通过设置ListView的setOnItemClickListener
方法来实现。
示例代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvProduct"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品列表"
android:textSize="25dp"
app:layout_constraintBottom_toTopOf="@+id/lvProducts"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ListView
android:id="@+id/lvProducts"
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.example.myapplication.R;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ArrayAdapter<String> adapter;
private String[] data = {"item1", "item2", "item3", "item4", "item5"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lvProducts);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = data[position];
Toast.makeText(MainActivity.this, "点击了:" + item, Toast.LENGTH_SHORT).show();
}
});
}
}
效果图:
2.3 滑动操作
通过ScrollView实现滑动操作
ScrollView称为滚动视图,当在一个屏幕的像素显示不下绘制的UI控件时,可以采用滑动的方式,使控件显示
两种使用方式:
1.垂直滚动视图ScrollView
2.水平滚动视图HorizontalScrollView
示例代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</ScrollView>
</LinearLayout>
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tvContent = findViewById(R.id.tvContent);
StringBuilder sb = new StringBuilder();
for (int i = 0;i < 100; i++){
sb.append("第"+i+"条数据..");
sb.append("\n");
}
tvContent.setText(sb.toString());
}
}
效果图:
2.4 菜单项
菜单类型:Android提供了三种主要的菜单类型,分别是选项菜单(Options Menu)、上下文菜单(Context Menu)和子菜单(Sub Menu)。
1.选项菜单:通常通过按下设备的"Menu"键来显示,或者在屏幕底部通过点击"更多"按钮展开。选项菜单最多可以显示6个菜单项,超出的部分会以"更多"的形式出现。开发者需要在Activity中重写onCreateOptionsMenu(Menu menu)方法来创建选项菜单,onOptionsItemSelected(MenuItem item)方法来处理用户的选择事件。
2.上下文菜单:与特定的View元素相关联,通常在长时间按压某个View时显示。要在Activity中为View注册上下文菜单,需要调用registerForContextMenu(View view)方法。上下文菜单的创建通过重写onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)方法实现,而用户选择的事件处理则在onContextItemSelected(MenuItem item)方法中完成。
3.子菜单:可以作为选项菜单或上下文菜单的一部分,通过调用Menu对象的addSubMenu()方法来创建。子菜单本身不能嵌套其他子菜单。
4.菜单项的操作:可以通过Menu对象的add()方法添加菜单项,并使用MenuItem的setIcon()方法为菜单项设置图标。如果需要动态改变菜单项,可以在onPrepareOptionsMenu(Menu menu)方法中进行修改,因为这个方法会在每次菜单显示前被调用。
示例代码:
menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_save"
android:title="保存" />
<item
android:id="@+id/action_settings"
android:title="设置" />
<item
android:id="@+id/action_exit"
android:title="退出" />
</menu>
MainActivity.java
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 创建菜单项
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
// 根据菜单项ID执行相应操作
if (id == R.id.action_save) {
Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.action_settings) {
Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
return true;
} else if (id == R.id.action_exit) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
}
效果图:
2.5 对话框
使用AlertDialog.Builder构建对话框,设置标题、消息、按钮等,最后通过show()方法显示对话框。
示例代码
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:text="显示对话框"
android:onClick="display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity.java:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void display(View view) {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher_background)
.setTitle("对话框")
.setMessage("Hello")
.create()
.show();
}
}
效果图:
三、学习反思与改进措施
-
理论与实践结合:在APP课程开发中,我认识到理论知识和实践技能的重要性。虽然有许多概念和设计模式是必须掌握的,但没有将其应用于实际项目中就很难深刻理解它们。因此,在未来的学习中,我将注重将理论知识应用于实践中,通过项目实战来提升我的开发能力。
-
参与社区和论坛:加入开发者社区,积极参与讨论,分享问题和解决方案,以获取反馈和建议。