选项菜单、Actionbar/Toolbar与Fragment

实验四 选项菜单、Actionbar/Toolbar与Fragment


目     录

选项菜单、Actionbar/Toolbar与Fragment

一、实验目的

二、实验内容

内容一,使用选项菜单,为应用程序添加退出选项。将退出选项放置在ToolBar中,具体效果如下所示,用户点击退出选项,则退出该应用

内容二,利用Toolbar、控件和碎片Fragment技术实现下述类似功能。

三、实验思路

(一)内容一要求,添加选项菜单。步骤为:

(二)内容二要求,则需要使用到Fragment、Toolbar以及选项菜单。与课件Fragment小节中第一个例子类似。具体可参见第五章课件。Fragment操作的步骤如下:

四、实验步骤

(一)内容一

新建资源文件夹menu,在res/menu/文件夹中定义选项菜单的格式,这里用menu.xml命名。

2.在activity_main.xml布局文件中使用Toolbar控件。首先,在activity_main.xml布局文件中使用Toolbar控件。

3.activity_main.xml布局文件除了有Toolbar控件,下面与前面实验类似,放“用户名”和“密码”及其输入框。修改代码如下:

4.取消按钮

5.修改MainActivity.java代码,声明变量,将布局文件中的Toolbar控件传递给toolbar变量。

6.在要使用该菜单的Activity中,重写onCreateOptionsMenu(Menu menu)方法,完成菜单初始化。

7.在要使用该菜单的Activity中,重写onOptionsItemSelected(MenuItem item)方法,完成菜单选项点击事件,为菜单选项添加功能。

8.将选项菜单以图片的形式显示在ToolBar中。

9.运行结果

(二)内容二

修改activity_main.xml布局文件,在Toolbar内添加“登录”和“注册”按钮。

        2.修改MainActivity.java文件

3.运行结果

五、实验心得



 

一、实验目的

  1. 掌握选项菜单。
  2. 利用ActionBar设置选项菜单。
  3. 掌握ToolBar
  4. 利用ToolBar和Fragment设置多个标签。

二、实验内容

实验内容包括三个:

内容一,使用选项菜单,为应用程序添加退出选项。将退出选项放置在ToolBar中,具体效果如下所示,用户点击退出选项,则退出该应用

内容二,利用Toolbar、控件和碎片Fragment技术实现下述类似功能。

    

当用户点击“登陆”按钮,显示登陆界面,点击“注册”按钮,显示注册界面。如上面两图所示。不同选项,产生不同的显示效果。

内容二不使用选项菜单,直接在Toolbar上放置其它控件,如TextViewImageView

三、实验思路

(一)内容一要求,添加选项菜单。步骤为:

1. 新建资源文件夹menu,在res/menu/文件夹中定义选项菜单的格式,这里用menu.xml命名。

2. activity_main.xml布局文件中使用Toolbar控件。首先,在activity_main.xml布局文件中使用Toolbar控件。

<androidx.appcompat.widget.Toolbar

    android:id="@+id/my_tool_bar"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:background="?attr/colorPrimary"

    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

然后,修改MainActvity.java代码。添加属性。

private Toolbar toolbar;

最后,在onCreate方法中使用Toolbar作为操作栏。

toolbar = findViewById(R.id.my_tool_bar);

setSupportActionBar(toolbar);

3. 在要使用该菜单的Activity中,重写onCreateOptionsMenu(Menu menu)方法,完成菜单初始化。

4. 在要使用该菜单的Activity中,重写onOptionsItemSelected(MenuItem item)方法,完成菜单选项点击事件,为菜单选项添加功能。

将选项菜单以图片的形式显示在ToolBar中。步骤两步:

        ①为选项菜单添加图标。

      ②将选项菜单设置到Toolbar中。这里只需要修改选项菜单格式文件中,对应Item项的app:showAsAction属性即可。

(二)内容二要求,则需要使用到Fragment、Toolbar以及选项菜单。与课件Fragment小节中第一个例子类似。具体可参见第五章课件。Fragment操作的步骤如下:
FragmentManager fm = getSupportFragmentManager();

FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.main_root, fragment);

ft.commit();

其中第1,2,4步是固定步骤,第3步根据项目可执行添加,移除,替换碎片等操作。

    在Toolbar中使用控件较为简单,可直接放入activity_main.xml布局文件的Toolbar标签中,在MainActivity中直接通过findViewById方法即可拿到。

四、实验步骤

(一)内容一

  1. 新建资源文件夹menu,在res/menu/文件夹中定义选项菜单的格式,这里用menu.xml命名。

①右键点击app下的res文件夹,选择New->Sample Data  Directory。

图 1 新建menu文件夹

②右键点击menu文件夹,点击New->Menu Resource File,新建文件menu.xml

图 2新建文件menu.xml

③用menu.xml命名文件。

图 3 命名menu.xml

2.在activity_main.xml布局文件中使用Toolbar控件。首先,在activity_main.xml布局文件中使用Toolbar控件。

①在activity_main.xml布局文件中添加Toolbar控件,标题为“实验四”。

a.android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar": 这设置了Toolbar及其内部组件的主题为深色主题。

b.app:popupTheme="@style/ThemeOverlay.AppCompat.Light": 这设置了当你在Toolbar上显示一个上下文菜单或一个弹出菜单时所使用的主题。这里使用的是浅色主题。

<androidx.appcompat.widget.Toolbar
    android:id="@+id/tool_bar"
    android:layout_width="match_parent"
    android:layout_height="69dp"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:title="实验四">
</androidx.appcompat.widget.Toolbar>
3.activity_main.xml布局文件除了有Toolbar控件,下面与前面实验类似,放“用户名”和“密码”及其输入框。修改代码如下:

        ①TextView "用户名:"

android:id="@+id/userName": 定义了一个唯一的ID,用于在Java或Kotlin代码中引用。

android:layout_height="48dp": 定义了高度为48密度独立像素(dp)。

android:layout_width="216px": 定义了宽度为216像素。

android:gravity="center_vertical|right": 文本在垂直方向上居中,在水平方向上靠右。

android:layout_below="@+id/title": 放置在ID为"title"的组件之下。

android:text="用户名:": 设置显示的文本为"用户名:"。

        ②EditText "输入用户名"

android:id="@+id/enterUserName": 定义了一个唯一的ID。

android:layout_width="864px": 定义了宽度为864像素。

android:layout_height="48dp": 定义了高度为48dp。

android:layout_below="@+id/title" 和 android:layout_alignRight="@+id/userName": 放置在ID为"userName"的TextView组件之下,并且右对齐。

android:layout_alignParentRight="true": 与其父容器的右边对齐。

android:inputType="textPersonName": 设置输入类型为个人姓名。

        ③TextView "密码:"

android:id="@+id/userPassword": 定义了一个唯一的ID。

其他属性与第一个TextView类似,但显示文本为"密码:"。

        ④EditText "输入密码"

android:id="@+id/enterPassword": 定义了一个唯一的ID。

其他属性与"输入用户名"的EditText类似,但高度设置为"wrap_content"。

android:inputType="textPassword": 设置输入类型为密码,这样输入的字符会被隐藏。

        ⑤Button "下一步"

android:id="@+id/confirm": 定义了一个唯一的ID。

其他属性用于定位按钮,并设置其文本为"下一步"。

        ⑥Button "取消"

android:id="@+id/cancel": 定义了一个唯一的ID。

其他属性用于定位按钮,并设置其文本为"取消"。这个按钮被放置在"下一步"按钮的左侧。

4.取消按钮

点击Toolbar右上角退出按钮,可以退出。当用户点击一个ID为exit的菜单项时,结束当前的活动。

public boolean onOptionsItemSelected( MenuItem item) {

        int id = item.getItemId();

        if(id==R.id.exit) finish();

        return true;

    }

①int id = item.getItemId();: 这行代码获取被点击的菜单项的ID,并将其存储在整数变量id中。

②if(id==R.id.exit) finish();: 这是一个条件判断。如果被点击的菜单项的ID与常量R.id.exit相等(这通常表示一个退出或关闭菜单项),则调用finish()方法。finish()方法会结束当前的活动(Activity),并返回到前一个活动(如果有的话)。

③return true;: 这表示该方法已经成功处理了菜单项的点击事件,不需要其他的方法再处理这个事件。如果返回false,那么系统会继续寻找其他的方法来处理这个事件。

5.修改MainActivity.java代码,声明变量,将布局文件中的Toolbar控件传递给toolbar变量。
protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        toolbar = findViewById(R.id.tool_bar);

        setSupportActionBar(toolbar);

 }

        ①private Toolbar toolbar;声明了一个私有成员变量toolbar,其类型为Toolbar。Toolbar是Android中用于实现Material Design风格的操作栏的一个控件。

        ②toolbar = findViewById(R.id.my_tool_bar);使用findViewById方法来查找布局文件中定义的ID为my_tool_bar的Toolbar控件,并将其引用赋值给toolbar变量。

        ③setSupportActionBar(toolbar);调用了setSupportActionBar方法,并将之前找到的toolbar作为参数传入。这会将该Toolbar设置为当前Activity的操作栏。

6.在要使用该菜单的Activity中,重写onCreateOptionsMenu(Menu menu)方法,完成菜单初始化。

在Activity中加载并创建选项菜单。它首先获取一个MenuInflater对象,然后使用这个对象来从XML资源文件中加载菜单项到传入的Menu对象中,最后返回true表示已经处理了菜单的创建。

public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu, menu);

        return true;

    }

        ①公共方法的声明,其名为onCreateOptionsMenu。它属于Activity类中的一个回调方法。当一个Activity被创建时,此方法会被自动调用,以准备Activity的选项菜单。这个方法接受一个Menu类型的参数,名为menu。这个参数用于存放将要创建的菜单项。

        ②getMenuInflater().inflate(R.menu.menu, menu);这行代码调用了getMenuInflater()方法,它返回一个MenuInflater对象。这个对象用于将XML菜单资源文件转换为Menu对象。

inflate()方法用于将XML菜单资源文件加载到Menu对象中。这里的第一个参数是资源的ID,即R.menu.menu,表示要加载的菜单资源文件。第二个参数是存放加载后的菜单项的Menu对象。

        ③return true;这行代码返回了一个布尔值true。在onCreateOptionsMenu方法中,返回true表示这个Activity已经处理了菜单的创建,系统将不再为它显示标准选项菜单。如果返回false,系统会继续显示标准选项菜单。

7.在要使用该菜单的Activity中,重写onOptionsItemSelected(MenuItem item)方法,完成菜单选项点击事件,为菜单选项添加功能。

处理在Activity的选项菜单中点击的事件。当用户点击ID为“exit”的菜单项时,当前Activity会被关闭。

public boolean onOptionsItemSelected( MenuItem item) {

        int id = item.getItemId();

        if(id==R.id.exit) finish();

        return true;

    }

        ①public boolean onOptionsItemSelected( MenuItem item) {公共方法的声明,其名为onOptionsItemSelected。它属于Activity类中的一个回调方法。当一个选项菜单项被点击时,此方法会被自动调用。

这个方法接受一个MenuItem类型的参数,名为item。这个参数代表被点击的菜单项。

        ②int id = item.getItemId();这行代码从被点击的菜单项中获取其ID,并将其存储在整数变量id中。

        ③if(id==R.id.exit) finish();这行代码检查被点击的菜单项的ID是否等于资源IDR.id.exit。如果是,则调用finish()方法关闭当前Activity。这通常用于实现退出功能。

        ④return true;这行代码返回true。在onOptionsItemSelected方法中,返回true表示该事件已被处理,而系统不会为其他菜单项或Activity的默认行为处理此事件。如果返回false,系统可能会继续处理其他菜单项或Activity的默认行为。

8.将选项菜单以图片的形式显示在ToolBar中。

        ①为选项菜单添加图标

首先,确保选项菜单项(通常在XML文件中定义)都有一个图标。图标通常是Drawable资源,在 res/drawable 目录下创建或获取。

    <item

        android:id="@+id/exit"

        android:title="退出"

        android:icon="@drawable/exit"

        android:orderInCategory="1"

        app:showAsAction="always"/>

a.android:icon="@drawable/exit":这是为菜单项设置的图标资源。这里引用了@drawable/exit,意味着图标文件名为“exit”的图像资源应该在res/drawable目录下。

b.android:orderInCategory="1":这个属性决定了菜单项的排序。数字越小,排序越前。这里设置为1,意味着这个菜单项会排在其他所有设置了orderInCategory属性的菜单项之前。

c.app:showAsAction="always":这个属性决定了菜单项如何显示。always意味着这个菜单项将始终显示在主屏幕(ActionBar)上,而不是在溢出菜单(Overflow Menu)中。

        ②将选项菜单设置到Toolbar中

确保你在XML菜单文件中为每个菜单项设置了正确的 app:showAsAction 属性。这个属性决定了该菜单项如何在ToolBar中显示。

public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu, menu);

        return true;

    }
9.运行结果

使用选项菜单,为应用程序添加退出选项。将退出选项放置在ToolBar中,具体效果如下所示,用户点击退出选项,则退出该应用。运行结果如图4

图 4添加选项菜单

(二)内容二

直接在Toolbar上放置其它控件,如TextView和ImageView。显示“登录”和“注册”按钮。

1.修改activity_main.xml布局文件,在Toolbar内添加“登录”和“注册”按钮。
<TextView

            android:id="@+id/register"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:textSize="18dp"

            android:layout_gravity="right"

            android:layout_margin="10dp"

            android:text="注册" />

        <TextView

            android:id="@+id/login"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:textSize="18dp"

            android:layout_gravity="right"

            android:text="登录" />

两个TextView都被放置在Toolbar的右侧(通过layout_gravity="right"属性)。这意味着它们会显示在工具栏的右侧,紧挨着工具栏的边缘。

        2.修改MainActivity.java文件

在ID为R.id.main_root的容器中,用一个新的Fragment(fragment)替换原有的Fragment(如果有的话)。

FragmentManager fm = getSupportFragmentManager();

FragmentTransaction ft = fm.beginTransaction();

ft.replace(R.id.main_root, fragment);

ft.commit();

        ①FragmentManager fm = getSupportFragmentManager();这行代码获取了MainActivity中的FragmentManager实例。FragmentManager是用于执行Fragment事务(例如添加、替换、删除等)的管理器。

   ② FragmentTransaction ft = fm.beginTransaction();通过FragmentManager的beginTransaction()方法,开始一个新的Fragment事务。这个事务可以包含多个对Fragment的更改,并且可以一起提交。

        ③ ft.replace(R.id.main_root, fragment);使用replace()方法替换容器ID为R.id.main_root的Fragment。这意味着,如果容器中已经有其他Fragment,它会被这个新的fragment替换。如果没有其他Fragment,那么这个fragment会被添加到容器中。

        ④ft.commit();  提交前面所做的所有更改。这是必须的,因为只有提交事务,之前所做的更改才会实际生效。

3.运行结果

①点击“登陆”出现图5左图,要求用户输入用户名和密码,点击“取消”退出,点击右上角退出按钮也可以退出。

②点击“注册”出现图5右图,用户可以进行“爱好选择”和“性别选择”,爱好可以多选,性别只能选择一个且必须选择一个。

图 5内容二运行结果

五、实验心得

通过这次实验,我深入了解了Android开发中的选项菜单、ActionBar、ToolBar以及Fragment的使用。掌握了如何创建和显示选项菜单。选项菜单是一种用户界面元素,允许用户在应用程序中执行各种操作。通过使用onCreateOptionsMenu()和onOptionsItemSelected()方法,我可以创建和响应选项菜单项的点击事件。

学习了如何使用ToolBar。ToolBar是一种用户界面元素,提供了与ActionBar类似的功能,但具有更多的自定义选项。通过使用ToolBar,我可以更好地控制应用程序的外观和功能。以及如何使用ToolBar和Fragment设置多个标签页。Fragment是一种可重复使用的用户界面片段,可以嵌入到Activity中。通过使用Fragment和ToolBar,我可以创建多个标签页,并在这些标签页之间轻松切换。

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源来在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值