IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android详解(二) -> 正文阅读

[移动开发]Android详解(二)

一、四大组件之Activity

1.AndroidManifest.xml

参考:https://blog.csdn.net/weixin_41729259/article/details/87910512?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control

2.Activity之间跳转

问题:为什么需要显式和隐式两种意图?

回答:显式意图一般用于应用内组件跳转,隐式意图一般用于应用之间跳转,第三方应用的跳转。

2.1 显式意图

demo内容:模拟登陆,通过显式意图实现界面跳转,并将数据从一个页面传到另一个页面。

流程步骤:

第一步:创建一个Android项目, 当前项目中只包含一个Activity(MainActivity)

第二步:在第一个Activity的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:orientation="vertical"
    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="账号:"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <EditText
        android:id="@+id/account"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密码:"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <EditText
        android:id="@+id/password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


    <Button
        android:id="@+id/login"
        android:text="立即登陆"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

第三步:创建第二个Activity页面,并在AndroidManifest.xml中注册第二个Activity页面。

?第四步:在第二个Activity的activity_second.xml中,编写第二个页面的内容,包含从第一个页面传来的数据。

<?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:layout_height="match_parent">

    <TextView
        android:layout_marginTop="20dp"
        android:text="登陆信息如下:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:layout_marginTop="20dp"
        android:id="@+id/info"
        android:text="您的登陆账号为:XXX,登陆密码为:***"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

?第五步:在第一个Activity页面中,获取View,并处理登陆逻辑。

package com.bytedance.marden;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private static final String TAG="MainActivity";
    private EditText maccount;
    private EditText mpassword;
    private Button mlogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取View
        initView();
        //监听登陆按钮
        initListener();

    }

    //监听登陆按钮,处理登陆逻辑
    private void initListener() {
        mlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            //监听按钮点击事件
            public void onClick(View v) {
                //在日志中输出
                Log.d(TAG,"登陆按钮被点击了");
                //处理点击事件
                handlerLogin();
            }
        });
    }

    //处理点击事件
    private void handlerLogin() {
        //判断账号是否合法
        String accountText=maccount.getText().toString().trim();
        if(TextUtils.isEmpty(accountText)){
            Toast.makeText(this,"输入的账号为空",Toast.LENGTH_SHORT).show();
            return;
        }
        //判断密码是否合法
        String passwordText=mpassword.getText().toString().trim();
        if(TextUtils.isEmpty(passwordText)){
            Toast.makeText(this,"输入的密码为空",Toast.LENGTH_SHORT).show();
            return;
        }
        //若账号密码均合法时,将数据传到另一个Activity页面
        //创建意图对象,并通过startActivity方法跳转
        Intent intent=new Intent(this,SecondActivity.class);
        //将数据传入意图对象intent中
        intent.putExtra("account",accountText);
        intent.putExtra("password",passwordText);
        startActivity(intent);

    }

    //获取View
    private void initView(){
        maccount=this.findViewById(R.id.account);
        mpassword=this.findViewById(R.id.password);
        mlogin=this.findViewById(R.id.login);
    }


}

第六步:在第二个Activity页面,获取intent对象,并获取第一个Activity页面传入的数据

package com.bytedance.marden;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import androidx.annotation.Nullable;

public class SecondActivity extends Activity {
    private static final String TAG="SecondActivity";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        //获取intent对象,并获取intent中的数据
        Intent intent=getIntent();
        String account=intent.getStringExtra("account");
        String password=intent.getStringExtra("password");

        //获取TextView,并将数据显示到TextView中
        TextView info=this.findViewById(R.id.info);
        info.setText("您的登陆账号为:"+account+"   ,登陆密码为:"+password);

        //打印日志
        Log.d(TAG,"account=="+account);
        Log.d(TAG,"password=="+password);
    }
}

结果:

2.2 隐式意图

demo内容:模拟登陆,通过隐式意图实现界面跳转,并将数据从一个页面传到另一个页面。

流程步骤:

第一步:创建一个Android项目, 当前项目中只包含一个Activity(MainActivity)

第二步:在第一个Activity的activity_main.xml中,编写登陆页面,包含账号输入、密码输入、登陆按钮。

第三步:创建第二个Activity页面,并在AndroidManifest.xml中注册第二个Activity页面。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bytedance.day20210714_demo2">

    <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/Theme.Day20210714_demo2">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.bytedance.SECOND_PAGE"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>


    </application>

</manifest>

?第四步:在第二个Activity的activity_second.xml中,编写第二个页面的内容,包含从第一个页面传来的数据。

?第五步:在第一个Activity页面中,获取View,并处理登陆逻辑。

第六步:在第二个Activity页面,获取intent对象,并获取第一个Activity页面传入的数据

结果:

2.3 显式意图跳转第三方应用

第一步:创建 Android应用,在主Activity的布局中,设置一个点击按钮。

<?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">

    <Button
        android:id="@+id/skip"
        android:layout_marginTop="300dp"
        android:text="点我跳转到浏览器"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

第二步:在主Activity中,监听按钮点击事件,并添加处理点击事件的逻辑。

说明:通过显式意图进行第三方应用的跳转,需要知道第三方应用的软件包名称或完全限定的组件类名。

package com.bytedance.day20210715_demo2;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initListener();
    }

    //按钮监听
    private void initListener() {
        //获取主Activity中的Button
        Button button =this.findViewById(R.id.skip);
        //为Button添加点击监听
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //点击事件处理逻辑
                handleListener();
            }
        });
    }

    //点击事件处理逻辑
    private void handleListener() {
        Intent intent = new Intent();
        //第一种写法
//        intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
        //第二种写法
        ComponentName componentName = new ComponentName("com.android.browser","com.android.browser.BrowserActivity");
        intent.setComponent(componentName);
        startActivity(intent);

    }


}

?结果:

2.4 隐式意图跳转第三方应用

第一步:创建 Android应用,在主Activity的布局中,设置一个点击按钮。

<?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">

    <Button
        android:id="@+id/skip"
        android:text="点我跳转到浏览器(隐式意图)"
        android:layout_marginTop="300dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

第二步:在主Activity中,监听按钮点击事件,并添加处理点击事件的逻辑。

说明:通过隐式意图进行第三方应用的跳转,需要为Intent对象设置action值,category值,以及包名(系统5.1版本以上)。

package com.bytedance.day20210715_demo3;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //监听按钮点击事件
        initListener();
    }

    //监听按钮点击事件
    private void initListener() {
        Button button = this.findViewById(R.id.skip);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                handleListener();
            }
        });
    }


    //按钮点击事件的处理逻辑---跳转到浏览器
    private void handleListener() {
        //1.创建Intent对象
        //2.为Intent对象设置action值,actegory值以及包名(5.1系统以上需要设置包名)
        //3.通过startActivity方法跳转到另一个界面
        Intent intent = new Intent();
        intent.setAction("android.intent.action.SEARCH");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setPackage("com.android.browser");
        startActivity(intent);
    }


}

?结果:

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 23:49:37  更:2021-07-15 23:49:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 11:57:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码