博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓学习UI组件-Activity-组件
阅读量:7092 次
发布时间:2019-06-28

本文共 14453 字,大约阅读时间需要 48 分钟。

hot3.png

1.Activity概述

 

 

 

2.状态与生命周期概述

 

 

 

3.状态与生命周期详解

package com.example.administrator.myapplication; import android.app.Activity; import android.os.Bundle; /*Activity三个状态和七大生命周期方法分析*/ public class MainActivity extends Activity {
//activity创建时第一个调用的方法,通常我们在该方法中加载布局文件,初始化UI组件,事件注册等等 @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("MainActivity-onCreate"); } /*在onCreate之后调用,用于显示界面,但用户还不能进行交互*/ @Override protected void onStart() {
super.onStart(); System.out.println("MainActivity-onStart"); } /*当一个stopped状态的Activity被返回时调用,之后再调用onStart)方法,进入运行状态*/ @Override protected void onRestart() {
super.onRestart(); System.out.println("MainActivity-onRestart"); } /*在onStart后调用,该方法执行完成后,用户可以进行交互,当前Activity进入resume的状态(运行状态) * 当一个paused状态的activity被重新返回时,会再次调用该方法,让Activity进入运行状态 * */ @Override protected void onResume() {
super.onResume(); System.out.println("MainActivity-onResume"); } /*当其他Activity(透明或窗口模式)进入时,该方法被调用,让当前Activity进入paused(暂停)状态 * 当前Activity还可见,但不可进行交互,如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁(kill) * 当前Activity被返回时会调用onResume()方法 * */ @Override protected void onPause() {
super.onPause(); System.out.println("MainActivity-onPause"); } /*当其他Activity完全覆盖该Activity时,会被调用,当前Activity进入stopped状态(停止状态) * 当前Activity不可见,不可进行交互,如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁(kill) * 当前Activity被返回时会调用onRestart()方法 * */ @Override protected void onStop() {
super.onStop(); System.out.println("MainActivity-onStop"); } /*当前Activity被销毁时调用,通常在该方法中用来释放资源,当前Activity killed*/ @Override protected void onDestroy() {
super.onDestroy(); System.out.println("MainActivity-onDestroy"); } }

 

4.传递简单数据

Dog.java

package com.example.administrator.myapplication; import android.os.Parcel; import android.os.Parcelable; /**  * Created by Administrator on 2016/3/17.  */ //打包裹 传递对象 性能好 public class Dog implements Parcelable{
String name; int age; String type; @Override public String toString() {
return "Dog{" + "age=" + age + ", name='" + name + '\'' + ", type='" + type + '\'' + '}'; } //描述内容 @Override public int describeContents() {
return 0; } @Override public void writeToParcel(Parcel dest, int flags) {
//把传递数据写进dest dest.writeString(name); dest.writeInt(age); dest.writeString(type); } //对象的创建器 序列化包裹 public static final Parcelable.Creator
CREATOR =new Parcelable.Creator
() {
@Override public Dog createFromParcel(Parcel in) {
Dog dog=new Dog(); dog.name=in.readString(); dog.age=in.readInt(); dog.type=in.readString(); return dog; } @Override public Dog[] newArray(int size) {
return new Dog[size]; } }; }

cat.java

package com.example.administrator.myapplication; import java.io.Serializable; /**  * Created by Administrator on 2016/3/17.  */ //可序列化 IO序列化 性能比较低 public class Cat implements Serializable {
String name; int age; String type; @Override public String toString() {
return "Cat{" + "age=" + age + ", name='" + name + '\'' + ", type='" + type + '\'' + '}'; } }

activity_main_a.xml

MainActivityA.java

package com.example.administrator.myapplication; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivityA extends Activity {
private EditText editText_info; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_a); editText_info = (EditText) findViewById(R.id.editText_info); } /*启动ActivityB,并且要传递数据*/ public void sendClick(View v) {
//创建一个意图(想干什么) 参数:上下文,要跳转的组件的字节码 Intent intent = new Intent(this, MainActivityB.class); String info = editText_info.getText().toString(); //封装要传递的数据,第一种方法 /* Bundle data = new Bundle(); data.putString("info", info); intent.putExtra("data",data);*/ //第二种方法 intent.putExtra("info", info); intent.putExtra("age", 24); startActivity(intent); } public void sendObjClick(View v) {
//用IO消耗的性能比较多 //要传递的对象 Cat cat = new Cat(); cat.name = "皮卡丘"; cat.age = 2; cat.type = "英短"; Intent intent = new Intent(this, MainActivityB.class); intent.putExtra("cat", cat); startActivity(intent); } public void sendObj2Click(View v) {
//Parcelable Dog dog = new Dog(); dog.name="旺旺"; dog.age=1; dog.type="金毛"; Intent intent = new Intent(this, MainActivityB.class); intent.putExtra("dog",dog); startActivity(intent); } }

activity_main_b.xml

MainActivityB.java

package com.example.administrator.myapplication; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivityB extends ActionBarActivity {
private TextView textView_info; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_b); textView_info = (TextView) findViewById(R.id.info); //intent内容一样 不是一个intent Intent intent = getIntent(); //第一种 /* Bundle data = intent.getBundleExtra("data"); String info = data.getString("info"); textView_info.setText(info);*/ //第二种 String info = intent.getStringExtra("info"); //第二个参数为默认值 int age = intent.getIntExtra("age", 18); Cat cat = (Cat) intent.getSerializableExtra("cat"); // Dog dog = intent.getParcelableExtra("dog"); // textView_info.setText(info + "---" + age ); textView_info.setText(info + "---" + age + "--" + cat.toString()+"\n"); // textView_info.setText(dog.toString()); } }

5.传递自定义对象数据

6.处理返回结果

activity_main_activity_result.xml

MainActivityResult.java

package com.example.administrator.myapplication; import android.content.Intent; import android.net.Uri; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivityResult extends ActionBarActivity {
private static final int REQUESTCODE_1 = 0x1; private EditText editText_number; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_activity_result); editText_number = (EditText) findViewById(R.id.editText_number); } /*选择一个电话号码*/ public void selectClick(View v) {
Intent intent = new Intent(this, PhoneNumberListActivity.class); //返回结果 第一个参数 intent 第二个参数 请求编码 startActivityForResult(intent, REQUESTCODE_1); } //重写该方法来处理返回的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUESTCODE_1 && resultCode == RESULT_OK) {
String number = data.getStringExtra("number"); editText_number.setText(number); } } /*拨打电话*/ public void callClick(View v) {
String number=editText_number.getText().toString(); Intent intent=new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:"+number)); startActivity(intent); } }

activity_phone_number_list.xml

PhoneNumberListActivity.java

package com.example.administrator.myapplication; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; public class PhoneNumberListActivity extends ActionBarActivity {
private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_phone_number_list); listView= (ListView) findViewById(R.id.listView); final String[] numbers={"13713820115","13692208307","13760359165","15817447169","13713686009"}; ArrayAdapter
adapter=new ArrayAdapter
(this,android.R.layout.simple_list_item_1,android.R.id.text1,numbers); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView
parent, View view, int position, long id) {
String number=numbers[position]; Intent intent=new Intent(); intent.putExtra("number",number); setResult(RESULT_OK,intent);//设置返回结果 finish();//结束当前界面 } }); } }
 
//最后要在清单文件配置打电话权限
 

7.屏幕方向与显示方式

横屏android:screenOrientation="landscape"

竖屏android:screenOrientation="portrait"

设置主题全屏 android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"

activity_screen_orientation.xml

ScreamOrientationActivity.java

package com.example.administrator.myapplication; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; /*设置全屏模式 * 1.通过代码实现 * 2.在清单文件中可以通过设置Activity的主题: * android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen" * * 设置窗体模式 * 1.在清单文件中设置主题: * android:theme="@android:style/Theme.DeviceDefault.Dialog" * */ public class ScreamOrientationActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //通过代码设置屏幕方向 // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //设置全屏 // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //去除标题栏 // requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_scream_orientation); } }

 

8.屏幕方向旋转

android:configChanges="keyboard|orientation|screenSize"

当配置了android:configChanges="orientation"属性,在横紧屏切换的时候不会重新执行Activity的onCreate方法,只是执行onConfigurationChanged方法,否则切换的时候会重新执行onCreate方法

activity_screen_change.xml

竖屏文件放在layout-land目录

ScreenChangeActivity.java

package com.example.administrator.myapplication; import android.app.Activity; import android.content.res.Configuration; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; /*屏幕切换默认情况下会重新创建Activity * 为了保存当前Activity的状态,我们可以重写onSaveInstanceState方法来保存相关数据 * 然后在onCreate方法中还原数据*/ public class ScreenChangeActivity extends Activity {
int index = 0; //横屏竖屏状态要保存下来 @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_screen_change); System.out.println("ScreenChangeActivity--onCreate"); //还原状态值 if (savedInstanceState != null) {
index = savedInstanceState.getInt("index", 0); } } public void changeClick(View v) {
index++; System.out.println("index=" + index); } //切换屏保存状态 @Override protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); System.out.println("onSaveInstanceState"); outState.putInt("index", index); } //改变布局排版配置 @Override public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); System.out.println("onConfigurationChanged"); } }

AndroidManifest.xml

 

 

9.SharedPreferences

activity_share_preferences.xml

SharePreferencesActivity.java

package com.example.administrator.myapplication; import android.content.Context; import android.content.SharedPreferences; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.text.TextUtils; import android.widget.EditText; public class SharePreferencesActivity extends ActionBarActivity {
private SharedPreferences sp; private EditText editText_msg; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_share_preferences); editText_msg= (EditText) findViewById(R.id.editText_msg); //获取当前程序的SharedPreferences对象 sp = getSharedPreferences("msg", Context.MODE_PRIVATE); } //还原数据 @Override protected void onResume() {
super.onResume(); editText_msg.setText(sp.getString("msg", "")); //删除数据 SharedPreferences.Editor editor=sp.edit(); editor.remove("msg"); editor.commit(); } //我们在该事件方法里来存储数据 @Override protected void onPause() {
super.onPause(); String msg=editText_msg.getText().toString(); if(TextUtils.isEmpty(msg)) {
return; } SharedPreferences.Editor editor= sp.edit(); editor.putString("msg",msg); editor.commit();//提交 } }

转载于:https://my.oschina.net/xiaofeiandroid/blog/643804

你可能感兴趣的文章
《软件测试》学习笔记(Ron Patton编著 第二版)(二)
查看>>
谁能解释下chrome下载的奇怪现象
查看>>
国际化总结—关于script脚本
查看>>
随笔-半成品
查看>>
我的友情链接
查看>>
SurfaceView 连续渲染 SurfaceHolder Canvas
查看>>
压缩磁盘节约磁盘空间
查看>>
自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机[学习马哥]
查看>>
我的友情链接
查看>>
Geek爱旅行 - 龙猫
查看>>
《NLP汉语自然语言处理原理与实践》结构图
查看>>
cache和buffer之区别
查看>>
路由协议
查看>>
实用土方之妇科男性科
查看>>
初始MyBatis
查看>>
debian下使用dig/nslookup
查看>>
135.003 智能合约后端优化和产品化
查看>>
解释器模式 Interpreter 行为型 设计模式(十九)
查看>>
K-Modes算法[聚类算法]
查看>>
Const #define
查看>>