Android学习第一天

一、一些Android的知识

  • Android的系统架构:Linux内核层、系统运行库层、应用框架层、应用层。

  • Android四大组件:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)、内容提供器(Content Provider)

  • Android提供了:四大组件、系统控件、SQLite数据库、多媒体服务、地理位置定位

  • Android学习入门:https://blog.csdn.net/myosotis5/article/details/79208707

  • 目录结构

  • 目录结构

  • Android程序的设计讲究逻辑和视图分离

  • res目录下:drawable(图片)、layout(布局)、values(字符串)

  • res目录:以drawable开头的文件放图片,以mipmap开头的文件放应用图标(兼容各种设备),以values开头的文件夹用来放字符串、样式、颜色等配置,layout文件夹放布局文件。

  • Android中的工具类日志Log(android.util.Log),提供了5个打印日志的方法。

  • 日志:Log.v() Log.d() Log.i() Log.w() Log.e()

二、Hello World分析

1.Android-Mainfest.xml文件

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

表示对MainActivity这个活动进行注册,没有在Android-Mainfest.xml中注册的活动是不能使用的。

其中,intent-filte里的两行代码表示MainActivity是项目的主活动(点击应用图标,首先启动的活动)。

2.MainActivity.java文件

public class MainActivity extends AppCompatActivity { //继承自AppCompatActivity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//活动被创建时必须要执行的方法
        setContentView(R.layout.activity_main);//为当前活动引入一个activity_main布局
    }
}

AppCompatActivity

3.layout内的activity_main.xml(activity_main的布局文件)

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

TextView是Android系统提供的一个控件,用来在布局中显示文字

4.values内的string.xml

<resources>
    <string name="app_name">Hello World</string>
</resources>

引用方式:①代码中:R.string.app_name ②XML:@string/app_name

引用应用图标时:@mipmap/... 引用图片:@drawable/... 引用布局文件:@layout/...

<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">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

android:icon:指定项目的应用图标

android:label:指定应用名称

三、活动

1.手动创建活动

Java里包中创建活动(Java文件)—— res文件中创建layout文件夹,layout里创建布局文件(xml文件)—— 完善布局文件 —— 在Java文件中调用方法加载布局文件,如setContentView()——在AndroidMainfest.xml文件中注册,设置主活动

在创建活动时,Launcher Activity表示将其设置成为当前的主活动;Generate Layout File自动生成布局文件;

2.Toast

public class FirstActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        //获取在布局文件中定义的元素,返回View对象,向下转型成Button对象
        Button button1 = (Button) findViewById(R.id.button_1);
        //为按钮注册一个监听器,点击则执行onClick()方法
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //静态方法创建出一个Toast对象,show()方法显示出来
                Toast.makeText(FirstActivity.this, "有眼光",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }
}

3.在活动中使用Menu

在res文件夹下创建名为menu的文件夹——menu里创建Menu resource file——添加item标签(用来创建具体的菜单项, id给菜单项指定唯一标识符,title给菜单项指定一个名称)

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>
</menu>

在Java文件中重写方法onCreateOptionsMenu()方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //getMenuInflater()方法能够得到MenuInflater对象,再调用inflate()方法给当前活动创建菜单
    //inflate()第一个参数指定通过那个资源文件创建菜单,第二个参数指定将菜单项添加到哪一个Menu对象中
    getMenuInflater().inflate(R.menu.main, menu);
    //返回true:允许创建的菜单显示出来;返回false:无法显示创建的菜单
    return true;
}

定义菜单响应事件,重写onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    //调用item.getItemId()来判断点击的哪一个菜单选项
    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:break;
    }
    return true;
}

4.销毁一个活动

①使用BACK键 ②使用Activity类中提供的finish()方法

5.使用Intent

Intent是Android程序中各组件之间交互的一种重要方式,可以指明当前组件项执行的动作,可以在不同组件之间传递数据。

1)使用显示Intent

@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 v) {
            //第一个参数Context要求提供一个启动活动的上下文,第二个参数Class指定想要启动的目标活动
            Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
            //Activity类提供的startActivity()方法,接受Intent参数,启动活动
            startActivity(intent);
        }
    });
}

2)使用隐式Intent

在AndroidMainfest.xml文件中指定当前活动的action和category

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

修改FirstActivity.java中的点击事件

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 v) {
            Intent intent = new Intent("com.example.activitytest.ACTION_START");
            startActivity(intent);
        }
    });
}

3)其他隐式Intent

  • Intent可以启动自己的活动,也可以启动其他程序的活动。

    button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            //指定Intent的活动是Intent.ACTION_VIEW(Android内置活动,常量值为android.intent.action.VIEW)
           Intent intent = new Intent(Intent.ACTION_VIEW);
            //setDate()接收一个Uri对象,指定当前Intent正在操作的数据
            //数据以字符串的形式传入Uri.parse()进行解析
           intent.setData(Uri.parse("http://www.baidu.com"));
           startActivity(intent);
        }
    });
    

打开网页界面、拨打电话界面

button1.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
       Intent intent = new Intent(Intent.ACTION_DIAL);
        //data部分指定的协议是tel,号码是10086
       intent.setData(Uri.parse("tel:10086"));
       startActivity(intent);
    }
});

4)向下一个活动传递数据

在FirstActivity.java中使用putExtra()将数据暂存在Intent中

button1.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
       String data = "Hello SecondActivity";
       Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
       intent.putExtra("extra_data", data);
       startActivity(intent);
    }
});

在SecondeActivity.java中得到数据

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    //得到用于启动SecondActivity的Intent
    Intent intent = getIntent();
    //获得要传递的数据,如果是int型则用getIntExtra()方法;如果是bool型则用getBooleanExtra(); 
    String data = intent.getStringExtra("extra_data");
    Log.d("SecondActivity", data);
}

5)给上一个活动返回数据

6.活动的生命周期

1)返回栈

Android活动是可以层叠的。

Android是使用任务(Task)来管理活动的。一个任务就是一组存放在栈里的活动的集合。

2)活动状态

运行状态、暂停状态、停止状态、销毁状态

3)活动的生存期

posted @ 2021-01-28 16:19  Jerry_京  阅读(52)  评论(1)    收藏  举报