安卓基础学习(android studio)

一、
安卓需要在AndroidManifest.xml注册一个活动,如果在这个文件中没有注册,则这个活动将无法运行
该注册代码为

<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=".MainActivity">//对MainActivity的注册
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

二、
Android.gradle使用了基于groovy的特定领域语言(DSL)来声明项目设置。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.ewewwfef.myapplication6"
        minSdkVersion 25   //用于指定兼容最低的android版本
        targetSdkVersion 26  //表示在指定的版本上经过了充分的1测试
        versionCode 1
        versionName "1.0"
		// versionCode    ersionName 项目版本号与版本名,在之后程序安装的过程中十分的重要
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
//这其中还包括release包,而release包可以忽略不写。
        release {
	//对于指定代码进行混淆的内容
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

三、
自己手动创建activity这时候选择new empty activity
勾选backwords compatibility是自动向下兼容
上面两个选项分别是自动生成布局和选择当前活动为主活动。

点击finish则自动生成带吗如下

package com.example.ewewwfef.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

其中声明了onCreate方法,我们也可以在其中加入我们自己的逻辑
四、
注册主活动

<activity android:name=".FirstActivity" android:label="This is firstactivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

五、
在活动中使用Toast
代码如下

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        Button button1=(Button)findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(FirstActivity.this,"you clicked button1",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }
}

运行后会弹出黑框
在这里插入图片描述

public void onClick(View view)
  {
      finish();
  }

将onClick函数中的内容改为finish()则点击按钮之后该活动将被销毁。
六、
使用intent在活动之间穿梭
①首先是使用显示intent的穿梭
Intent的头文件为android.content.Intent;
以下为调用intent的代码

public void onClick(View view)
  {
      Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
      startActivity(intent);
  }

②隐式intent的穿梭
AndroidMainfest中的代码如下

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

调用intent的代码如下

public void onClick(View view)
   {
       Intent intent=new Intent("com.example.activitytest.ACTION_START");
       startActivity(intent);
   }

③隐式intent穿梭的扩展内容
调用intent的代码如下

public void onClick(View view)
{
  /*  Intent intent=new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));*///扩展到www.baidu.com
    Intent intent=new Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:10086"));//扩展到拨打10086
    startActivity(intent);
}

七、
Menu菜单的使用
在res文件夹下新建menu文件夹,在menu文件夹下新建menu resource文件main.xml并在该文件中添加如下代码

<item
    android:id="@+id/add_item"
    android:title="Add"/>
<item
    android:id="@+id/remove_item"
    android:title="Remove"/>

并在firstactivity.java中添加如下代码

public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main,menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {//按钮选择事件
    switch (item.getItemId())
    {
        case R.id.add_item:
            Toast.makeText(this,"You clicked add",Toast.LENGTH_SHORT).show();
            break;
        case R.id.remove_item:
            Toast.makeText(this,"You clicked remove",Toast.LENGTH_SHORT).show();
            break;
        default:
    }
    return true;
}

这个代码再次使用了toast,如果点击按钮则会产生黑框
onOptionsItemSelected函数是用来判断我们点击了哪一个选项
onCreateOptionsMenu函数是用来创建menu对象,inflate的两个参数分别是菜单格式的原文件和菜单格式将要应用的对象
八、向下一个活动传递数据
FirtActivity中的代码

public void onClick(View view) {
    String data="Hello seccondActivity";
    Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
    intent.putExtra("extra_data",data);
    startActivity(intent);
}

secondActivity中的代码

Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);

该段代码在onCreate()函数中
运行该段代码后,点击目标按钮将会在logcat中输出hello secondActivity
在这里插入图片描述
九、返回数据给上一个活动
SecondActivity代码

public void onClick(View view)
{
    Intent intent=new Intent();
    intent.putExtra("data_return","Hello FirstActivity");
    setResult(RESULT_OK,intent);
    finish();
}

firstActivity中的代码

protected  void onActivityResult(int requestCode,int resultCode,Intent data)
{
    switch(requestCode)
    {
        case 1:
            if(requestCode==RESULT_OK)
            {
                String returnedData=data.getStringExtra("data_return");
                Log.d("FirstActivity",returnedData);
            }
            break;
        default:
    }
}

onCreate函数中的代码

public void onClick(View view) {
    String data="Hello seccondActivity";
    Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
    intent.putExtra("extra_data",data);
   startActivityForResult(intent,1);
}

十、活动的生存周期
Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节,其分别为

onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy(),
onRestart()

这七个方法除了onRestart()方法,其他都是两两相对的,可以分为三种生存期
① 完整生存期
onCreate(),onDestroy()之间
② 可见生存期
onStart(),onStop()之间
③ 前台生存期
onResume(),onPause()之间
在这里插入图片描述
十一、活动的生存周期开发实践
①首先按照书上的代码编写时android:theme="@android:style/Theme.Dialog"
若在AndroidManifest中有此段代码,则运行时会报错
这句代码应该是第二个活动不完全遮住主活动的意思
这样onStop()函数不会执行,但是这个代码执行会有错误。

②在onCreate通过savedInstanceState保存活动中的数据

if(savedInstanceState!=null)
{
    String tempDate=savedInstanceState.getString("data_key");
}

而且需要在类中定义以下函数

protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    String tempData="Something you just typed";
    outState.putString("data_key",tempData);
}

③ 活动的启动模式
在androidManifest.xml添加android:launchMode=”模式名称”
默认启动模式为Standard,下面列出所有的启动模式
Standard、SingleTop、SingleTask、SingleInstance
这几种模式的区别我没有详细看

④ 如何知晓当前是哪一个活动
要解决这个问题可以创建一个BaseActivity类(注:该类是写在各个活动所在的文件夹下的),这个类中没有活动实例,所以只需要创建一个.java文件,而且该类不需要再AndroidManifest.xml中注册
该类需要继承AppCopatActivity类
这样只需要重写onCreate()函数,让子类活动继承这个类便可以了
该类的书写方法

Protected void onCreate(Bundle savedInstanceState) 
{
	super.onCreate();
	Log.d(“BaseActivity”,getClass.getSimpleName());
}

⑤ 随时随地的退出程序
需要先写一个ActivityCollector类,类中代码如下所示

public class ActivityCollector {
    public  static List<Activity> activities =new ArrayList<>();

    public static void addActivity(Activity activity)
    {
        activities.add(activity);
    }
    public static void removeActivity(Activity activity)
    {
        activities.remove(activity);
    }
    public static void finishAll()
    {
        for(Activity activit:activities)
        {
            if(!activit.isFinishing())
                activit.finish();
        }
    }
}

然后BaseActivity类中重写onCreate方法

protected void onCreate(Bundle savedIntenceState)
{
    super.onCreate(savedIntenceState);
    Log.d("BaseActivity",getClass().getSimpleName());
    ActivityCollector.removeActivity(this);
}
@Override
protected  void onDestroy()
{
    super.onDestroy();
    ActivityCollector.removeActivity(this);
}

最后在进程BaseActivity的活动中的onClick书写如下代码

ActivityCollector.finishAll();

猜你喜欢

转载自blog.csdn.net/weixin_41796913/article/details/88142136