安卓学习UI组件-Activity-组件

1.Activity概述

H2NC[[PCW`BM2G22L{9(2BM

 

 

 

2.状态与生命周期概述

`U5M6N7$V5BKRK{_OIXN@`M

 

 

 

3.状态与生命周期详解

}H3`Y4ILL(CA0KW%HE8D~@H

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.传递简单数据

7D[C8FZPOF4Q{~06FJ8~{4L

LG~)8}913@(823S62((O{VU

JY0Z{C}[29~M4XT42ZTX]XQ

imageimageimageimage

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<Dog> CREATOR
=new Parcelable.Creator<Dog>()
{

@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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.MainActivityA">

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:hint="请输入信息..."
android:id="@+id/editText_info"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送"
android:id="@+id/button"
android:onClick="sendClick"
android:layout_below="@+id/editText_info"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传递对象1"
android:id="@+id/button_obj"
android:onClick="sendObjClick"
android:layout_below="@+id/button"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传递对象2"
android:id="@+id/button_obj2"
android:onClick="sendObj2Click"
android:layout_below="@+id/button_obj"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

</RelativeLayout>

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.MainActivityB">

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/info"/>
</RelativeLayout>

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.处理返回结果

5HF7S]Q1{@I$(2OYIM6VN6I

imageimageimage

activity_main_activity_result.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.MainActivityResult">

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:hint="请选择一个电话号码"
android:id="@+id/editText_number"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SELECT"
android:id="@+id/button_select"
android:onClick="selectClick"
android:layout_below="@+id/editText_number"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="CALL"
android:onClick="callClick"
android:id="@+id/button2_call"
android:layout_below="@+id/button_select"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignRight="@+id/button_select"
android:layout_alignEnd="@+id/button_select" />
</RelativeLayout>

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.PhoneNumberListActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>

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<String> adapter=new ArrayAdapter<String>
(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();//结束当前界面
}
});
}
}
 
//最后要在清单文件配置打电话权限
<uses-permission android:name="android.permission.CALL_PHONE" />
 

7.屏幕方向与显示方式

CGT_NHQUCO3[{Z(M(G87AIX

横屏android:screenOrientation="landscape"
竖屏android:screenOrientation="portrait"

{`WLN2O9M`P0CO$]0X7SPNU

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

imageimage

activity_screen_orientation.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.ScreamOrientationActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="屏幕方向测试"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>

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.屏幕方向旋转

]M{IRD@Q4WHVEY~ZTDTF1[0

android:configChanges="keyboard|orientation|screenSize"

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

imageimageimage

activity_screen_change.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.ScreenChangeActivity">

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:hint="请输入信息"
android:id="@+id/editText_info"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="change"
android:onClick="changeClick"
android:id="@+id/button_change"
android:layout_below="@+id/editText_info"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
竖屏文件放在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

<activity
android:name=".ScreenChangeActivity"
android:configChanges="keyboard|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

</activity>

 

 

9.SharedPreferences

YG$34U~(67SZ9Z0KG9LSDNQ

imageimageimage

activity_share_preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.administrator.myapplication.SharePreferencesActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button2"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/editText_msg"
android:hint="请输入消息"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_above="@+id/button2" />
</RelativeLayout>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值