zoukankan      html  css  js  c++  java
  • 2.Android开发笔记:Activity

    • 活动(Activity)

    1.创建活动:

           活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以包含零个或多个活动

           右击com.example.activitytest包→New→Activity→Empty Activity,会弹出一个创建活动的对话框,我们将活动命名为FirstActivity,并且不要勾选Generate File和Launcher Activity这两个选项,

    public class FirstActivity extends AppCompatActivity {    
          @Override     
          protected void onCreate(Bundle savedInstanceState) {       
      super.onCreate(savedInstanceState);         
    setContentView(R.layout.first_layout);     
    }
    }

           

    2.创建布局

              Android程序的设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是用来显示界面内容的,因此我们现在就来手动创建一个布局文件。 右击app/src/main/res目录→New→Directory,会弹出一个新建目录的窗口,这里先创建一个名为layout的目录。然后对着layout目录右键→New→Layout resource file,又会弹出一个新建布局资源文件的窗口,我们将这个布局文件命名为first_layout

     3.为活动设置布局

         

      setContentView(R.layout.first_layout);

    4.注册活动

      所有的活动都要在AndroidManifest.xml中进行注册才能生效

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.activitytest">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".FirstActivity" android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"></action>
                    <category android:name="android.intent.category.LAUNCHER"></category>
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    5.销毁活动:

            finish();
    • 布局上的按钮响应事件:
    @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout);

    Button button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Toast.makeText(FirstActivity.this, "Button被点击", Toast.LENGTH_LONG)
    .show();
    }
    });
    }
    • 在活动中创建菜单:


    1. 创建菜单:

      首先在res目录下新建一个menu文件夹,右击res目录→New→Directory,输入文件夹名menu,点击OK。接着在这个文件夹下再新建一个名叫main的菜单文件,右击menu文件夹→New→Menu resource file,输入main作为菜单文件名,

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:title="@string/additem" android:id="@+id/add_item"/>
        <item android:title="@string/removeItem" android:id="@+id/remove_item"/>
    </menu>

    2.添加菜单:
      在 Activity 类中, 按住快捷方式【Ctrl+O】,选择要重构的方法 【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,创建的菜单将无法显示。

    3.菜单响应事件:

     按住快捷方式【Ctrl+O】,选择要重构的方法 【onOptionsItemSelected】:
    @Override
        public boolean onOptionsItemSelected(@NonNull MenuItem item) {
            int itemId = item.getItemId();
         switch (itemId) {
                case R.id.add_item:
                    Toast.makeText(this, "添加", Toast.LENGTH_LONG).show();
                    Log.d("itemClick","添加");
                    break;
                case R.id.remove_item:
                    Toast.makeText(this, "删除", Toast.LENGTH_LONG).show();
                    Log.d("itemClick","删除");
                    break;
                default:
                    Toast.makeText(this, "无效点击", Toast.LENGTH_LONG).show();
                    Log.d("itemClick","无效点击");
                    break;
    
            }
            return true;

    }
    •  使用Intent在活动之间穿梭

          不管你想创建多少个活动,方法都和上一节中介绍的是一样的。
    唯一的问题在于,你在启动器中点击应用的图标只会进入到该应用的主活动,
    那么怎样才能由主活动跳转到其他活动呢?

      右击com.example.activitytest包→New→Activity→Empty Activity,
    会弹出一个创建活动的对话框,我们这次将活动命名为SecondActivity,
    并勾选Generate Layout File,给布局文件起名为second_layout,
    但不要勾选Launcher Activity选项

        AndroidManifest.xml 自动注册了SecondActivity:

     <activity android:name=".SecondActivity"></activity>

    由于SecondActivity不是主活动,因此不需要配置<intent-filter>标签里的内容,注册活动的代码也简单了许多。

    第二个活动已经创建完成,剩下的问题就是如何去启动这第二个活动了,这里我们需要引入一个新的概念:Intent。

    Intent

      Intent是Android程序中各组件之间进行交互的一种重要方式,
    它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
    Intent一般可被用于启动活动、启动服务以及发送广播等场景,由于服务、广播等

        显式Intent

                 修改FirstActivity中按钮的点击事件

                    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                    startActivity(intent);

      单击FirstActivity中的按钮,启动SecondActivity这个活动了。如果你想要回到上一个活动怎么办呢?很简单,按下Back键就可以销毁当前活动,从而回到上一个活动了。

      隐式Intent:

          指定了一系列更为抽象的action category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。

           在 AndroidManifest.xm 修改SecondActivity:

                

    <activity android:name=".SecondActivity">
    <intent-filter>
    <action android:name="com.example.activitytest.Xyz_Shuibian"></action>
    <category android:name="android.intent.category.DEFAULT"></category>
    </intent-filter>
    </activity>

           

        修改FirstActivity中按钮的点击事件:

    /*  Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    startActivity(intent);
    */

    Intent intent2 = new Intent("com.example.activitytest.Xyz_Shuibian");
    startActivity(intent2);

     只有 <action> 和 <category>中的内容同时能够匹配上Intent中指定的action 和 category时,这个活动才能响应该Intent。

    android.intent.category.DEFAULT是一种默认的category ,

    在调用 startActivity()方法的时候会自动将这个category添加到Intent中。

     每个Intent中只能指定一个action,但却能指定多个category。目前我们的Intent中只有一个默认的category,那么现在再来增加一个吧。

      在 AndroidManifest.xm 修改SecondActivity:

          <activity android:name=".SecondActivity">
                <intent-filter>
                    <action android:name="com.example.activitytest.Xyz_Shuibian"></action>
                    <category android:name="android.intent.category.DEFAULT"></category>
                    <category android:name="com.example.activitytest.Shuibian_category"></category>
                </intent-filter>
            </activity>

    修改FirstActivity中按钮的点击事件:

         Intent intent2 = new Intent("com.example.activitytest.Xyz_Shuibian");
         intent2.addCategory("com.example.activitytest.Shuibian_category");
         startActivity(intent2);

          更多的Intent隐式:

         使用隐式Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动。

    这使得Android多个应用程序之间的功能共享成为了可能。比如说你的应用程序中需要展示一个网页,这时你没有必要自己去实现一个浏览器(事实上也不太可能),而是只需要调用系统的浏览器来打开这个网页就行了。

    修改FirstActivity中按钮点击事件的代码:

    Intent intent3 = new Intent(Intent.ACTION_VIEW);
    intent3.setData(Uri.parse("http://www.baidu.com"));
    startActivity(intent3);

    指定了Intent的action 是 Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW

    Uri对象,主要用于指定当前Intent正在操作的数据

    我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。<data>标签中主要可以配置以下内容

    只有 <data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent。

    不过一般在<data>标签中都不会指定过多的内容,如上面浏览器示例中,其实只需要指定android:scheme为http,就可以响应所有的http协议的Intent了。

    除了http协议外,我们还可以指定很多其他协议,比如

             geo表示显示地理位置、

            tel表示拨打电话。

             下面的代码展示了如何在我们的程序中调用系统拨号界面

    首先指定了Intent的action 是 Intent.ACTION_DIAL,这又是一个Android系统的内置动作。

                    Intent intent4 = new Intent(Intent.ACTION_DIAL);
                    intent4.setData(Uri.parse("tel:10086"));
                    startActivity(intent4);

    然后在data部分指定了协议是tel,号码是10086。重新运行一下程序,在FirstActivity的界面点击一下按钮:

  • 相关阅读:
    c#基础之集合
    找出子字符串在字符串中的所有索引
    c# 排序
    C#基础之枚举
    验证用户名不为空并且不存在
    验证用户名和密码,输入三次不正确就锁定账号
    c#基础
    linux使用
    python之logging模块
    手写MyBatis,纯手工打造开源框架(第三篇:运筹帷幄)
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/12389213.html
Copyright © 2011-2022 走看看