【Android】Activity的使用手动创建的一个文件(包含ViewBinding,Toast,Menu的使用方法)

一、活动的手动创建

1、在AndroidManifest文件中注册

所有的活动都需要在AndroidManifest中注册,活动注册的声明需要放在标签内。在标签中我们使用了android:name来指定具体注册哪一个活动,那么这里填人的.FirstActivity是什么意思呢?其实这不过就是com.example.myapplication.MainActivity的缩写而已。

<activity
          android:name=".MainActivity"
          android:exported="true">
</activity>

当将 android:exported 属性设置为 "true" 时,表示该组件是对其他应用或组件公开的,其他应用可以通过隐式或显式 Intent 来启动或访问该组件。

当将 android:exported 属性设置为 "false" 时,表示该组件是私有的,只能被定义在同一个应用程序中的组件或服务所访问。其他应用不能直接启动或访问该组件。

不过,仅仅是这样注册了活动,我们的程序仍然是不能运行的,因为还没有为程序配置主活动,也就是说,当程序运行起来的时候,不知道要首先启动哪个活动。配置主活动的方法其实在第1章中已经介绍过了,就是在标签的内部加入标签。

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        //表示该组件是应用程序的主要入口点。
        <action android:name="android.intent.action.MAIN"/>
        //表示该组件可以作为应用程序的启动器
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

主要入口点是指当用户点击应用程序图标时,系统将启动具有此 Intent Action 的组件。

启动器是 Android 应用程序的入口点,当用户点击应用程序图标时,系统将启动包含此 Intent Filter 的组件,从而作为应用程序的入口点。

2、ViewBinding

2.1 什么是ViewBinding

WiewBinding总体来说其实非常简单,它的目的只有一个,就是为了避免编写findViewById,这和它另外一个非常复杂的兄弟DataBinding相比有明显的区别。

要想使用ViewBinding需要注意两件事。第一,确保你的Android Studio是3.6或更高的版本。第二,在你项目工程模块的build.gradle中加入以下配置:

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

2.2 在Activity中使用ViewBinding

一旦启动了ViewBinding功能之后,Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding类and。

Binding类的命名规则是将布局文件按驼峰方式重命名后,再加上Binding作为结尾。
image-20230717144847965

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FirstLayoutBinding binding = FirstLayoutBinding.inflate(getLayoutInflater());  //获得一个binding
        /**
         * 它的作用是将一个布局文件与当前的 Activity 关联,从而在屏幕上显示出该布局。
         * 相当于:setContentView(R.layout.first_layout);
         * binding.getRoot() 返回根视图,也就是布局文件的最外层视图。
         */
        setContentView(binding.getRoot());

        TextView textView = binding.button1;    //通过绑定对象binding获取一个TextView

        /**
         * 通过 textView 来操作该视图元素,例如设置文本内容、更改样式等。
         */
        textView.setText("hell");   //修改button的名称
        
    }
}

getLayoutInflater()的作用:

在 Android 中,布局文件是用 XML 格式来描述界面的,而 LayoutInflater 则负责将这些 XML 布局文件解析并转换成对应的 View 对象。这样,我们就可以在代码中动态地使用这些 View 对象,进行界面的显示和交互操作。

原本运行结果如下:

image-20230717144955178

通过textView.setText修改后结果如下:

image-20230717145145432


3、Toast提醒

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button button = (Button) findViewById(R.id.button1);    //获取Button对象

        /**
         * 调用setOnClickListener()方法获取button按钮的监听器,传入一个现实对象编写监听器发生事件
         */
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"这是一个通知", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

image-20230717145508659

Toast 是 Android 中一种轻量级的通知机制,用于在屏幕底部显示一条短暂的消息。makeText() 方法有三个参数:

  1. Context context:这个参数表示要显示 Toast 的上下文(Context)。在你的代码中,你可以使用 MainActivity.thisgetApplicationContext() 来传递上下文。

  2. CharSequence text:这个参数表示要显示的提示文本。在你的代码中,提示文本是 “这是一个通知”。

  3. int duration:这个参数表示 Toast 的持续时间,可以是 Toast.LENGTH_SHORTToast.LENGTH_LONG

    • Toast.LENGTH_SHORT:表示 Toast 将在屏幕上显示一段较短的时间,通常为约 2 秒钟。

    • Toast.LENGTH_LONG:表示 Toast 将在屏幕上显示一段较长的时间,通常为约 3.5 秒钟。

      image-20230717143544320

getApplicationContext() 是一个用于获取应用程序的全局上下文(Context)的方法。在 Android 开发中,Context 是一个非常重要的概念,它提供了访问应用程序环境和资源的接口,以及执行各种操作的能力。

getApplicationContext() 方法是 Context 类的一个成员方法,它可以在任何继承自 Context 的类中调用。它通常用于获取一个全局的、应用程序级别的上下文。全局上下文的生命周期与应用程序的生命周期一致,意味着它在整个应用程序的运行期间都存在,不受当前 Activity 或其他组件的生命周期的影响。

4、Menu菜单

4.1 创建并显示菜单

首先在ret下创建一个Menu文件夹,然后创建一个菜单文件

image-20230717154040514

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- id:指定菜单的唯一标识符-->
    <!-- title: 指定菜单的名称   -->
    <item android:id="@+id/add_item"
        android:title="Add"/>
    <item android:id="@+id/remove_item"
        android:title="Remove"/>
</menu>

重写onCreateOptionsMenu()方法,调用刚刚编写的菜单。

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

通过getMenuInflater()方法能够得到MenuInflater对象,再调用它的inflate()方法就可以给当前活动创建菜单了。inflate()方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单,这里当然传入R.menu.main。第二个参数用于指定我们的单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数。然后给这个方法返回true,表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示。

4.2 定义菜单响应事件

重写onOptionsItemSelected()方法响应菜单。onOptionsItemSelected() 方法是用于处理选项菜单(OptionsMenu)或上下文菜单(ContextMenu)中菜单项被选择的回调方法。

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        int itemId = item.getItemId();  //点击菜单功能后响应的Id值

        /**
         * 通过不同的Id触发不同响应事件
         */
        if(itemId == R.id.add_item){
            Toast.makeText(this,"you are Add", Toast.LENGTH_SHORT).show();
        } else if (itemId == R.id.remove_item) {
            Toast.makeText(this, "you are remove", Toast.LENGTH_SHORT).show();
        }

        return true;
    }

image-20230717193902509

4.3、销毁一个活动

使用Back键或者使用finish()方法。我们在活动中调用一下这个方法就能实现结束活动功能。注意finish销毁的是当前活动而不是全部活动。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一个简单的备忘录应用程序的代码示例。以下是XML和Java文件的代码: XML文件: ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:hint="Enter your note here" android:inputType="textMultiLine" android:maxLength="500" android:maxLines="10" android:minLines="1" android:textSize="18sp" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText" android:layout_alignParentEnd="true" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:text="Save" /> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/button" android:layout_marginTop="16dp" /> </RelativeLayout> ``` Java文件: ``` import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private EditText editText; private Button button; private ListView listView; private ArrayList<String> notesList; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText); button = findViewById(R.id.button); listView = findViewById(R.id.listView); notesList = new ArrayList<>(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, notesList); listView.setAdapter(adapter); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String note = editText.getText().toString(); if (note.isEmpty()) { Toast.makeText(MainActivity.this, "Please enter a note", Toast.LENGTH_SHORT).show(); } else { notesList.add(note); adapter.notifyDataSetChanged(); editText.setText(""); Toast.makeText(MainActivity.this, "Note added successfully", Toast.LENGTH_SHORT).show(); } } }); } } ``` 这是一个简单的备忘录应用程序,用户可以在EditText中输入笔记并点击“保存”按钮保存。保存的笔记将显示在ListView中。笔记最多可以包含500个字符。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

摸鱼小小虫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值