《APP应用开发》阶段学习总结

目录

一.安卓开发中的布局

1.1 介绍与用途

1.2 线性布局(LinearLayout)

1.3 表格布局(TableLayout)

1.4 帧布局(FrameLayout)

1.5 相对布局(RelativeLayout)

二、UI界面交互功能的实现方法

2.1 按钮点击事件

2.2 列表项点击事件

2.3 滑动操作

2.4 菜单项

2.5 对话框

三、学习反思与改进措施

一.安卓开发中的布局

1.1 介绍与用途

  1. 界面结构定义:布局作为用户界面(UI)的骨架,通过XML文件定义了应用界面的结构。它确定了各个UI元素如按钮、文本框、图像等的位置和排列方式。
  2. 视觉美感:一个良好的布局设计能够提升APP的视觉效果,吸引并保持用户的注意力。美观的界面可以让用户在使用过程中感到愉悦,从而提高用户体验。
  3. 信息展示:布局决定了信息的展示方式和顺序,合理的布局可以帮助用户更快地找到他们需要的信息或功能,提高操作效率。
  4. 适应性:良好的布局设计需要考虑不同设备的屏幕尺寸和分辨率,确保APP在不同设备上都能保持良好的显示效果和用户体验。
  5. 交互逻辑:布局还与APP的交互逻辑紧密相关,合理的布局可以引导用户按照开发者预设的逻辑进行操作,使得用户的行为更加符合设计意图。
  6. 功能性:布局不仅要考虑美观,还要考虑实用性。例如,按钮的大小和位置要方便用户点击,信息展示要清晰易懂,这些都是布局设计时需要考虑的功能因素。
  7. 响应式设计:现代APP开发中,布局需要支持响应式设计,即能够根据用户的交互和设备的变化自动调整布局,以适应不同的使用场景。
  8. 内容组织:良好的布局设计有助于内容的合理组织,使得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_toRightOfandroid:layout_toLeftOf等:定义控件相对于其他控件的位置。
  • android:layout_alignParentTopandroid:layout_alignParentBottom等:定义控件相对于父布局的位置。
  • android:layout_centerHorizontalandroid: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_toLeftOfapp:layout_constraintRight_toRightOf等:定义控件之间的约束关系。
  • app:layout_constraintTop_toTopOfapp:layout_constraintBottom_toBottomOf等:定义控件与父布局或其他控件的约束关系。
  • app:layout_constraintHorizontal_biasapp: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();
    }
}

效果图:

三、学习反思与改进措施

  1. 理论与实践结合:在APP课程开发中,我认识到理论知识和实践技能的重要性。虽然有许多概念和设计模式是必须掌握的,但没有将其应用于实际项目中就很难深刻理解它们。因此,在未来的学习中,我将注重将理论知识应用于实践中,通过项目实战来提升我的开发能力。

  2. 参与社区和论坛:加入开发者社区,积极参与讨论,分享问题和解决方案,以获取反馈和建议。

  • 36
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值