android横竖屏切换

一、android:configChanges="orientation|keyboardHidden|screenSize"

 

发现不论屏幕如何转动始终加载的是layout-port中的布局文件



1、启动Activity

12-30 07:02:56.786 18822-18822/? D/MainActivity: onCreate()

12-30 07:02:56.786 18822-18822/? D/MainActivity: onStart()

12-30 07:02:56.786 18822-18822/? D/MainActivity: onResume()

12-30 07:02:56.886 18822-18822/? D/MainActivity: onWindowFocusChanged()

2、退出Activity

12-30 07:08:21.582 23712-23712/com.example.huang.activity_life_cycle D/MainActivity: onPause()

12-30 07:08:21.662 23712-23712/com.example.huang.activity_life_cycle D/MainActivity: onWindowFocusChanged()

12-30 07:08:22.062 23712-23712/com.example.huang.activity_life_cycle D/MainActivity: onDestroy()

 

3、切换为横屏模式

12-30 07:13:47.846 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: onConfigurationChanged()

12-30 07:13:47.846 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: 横屏模式

 

 

4、再次切换为竖屏模式

12-30 07:14:52.630 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: onConfigurationChanged()

12-30 07:14:52.630 28852-28852/com.example.huang.activity_life_cycle D/MainActivity: 竖屏模式

 

二、android:screenOrientation="sensor"

1、启动Activity


12-30 07:21:53.822 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onCreate()

12-30 07:21:53.826 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onStart()

12-30 07:21:53.826 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onResume()

12-30 07:21:54.042 4453-4453/com.example.huang.activity_life_cycle D/MainActivity: onWindowFocusChanged()

2、 切换为横屏模式



12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onPause()

12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onSaveInstanceState()

12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onRetainNonConfigurationInstance()

12-30 07:23:30.046 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onDestroy()

 

 

12-30 07:23:30.058 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onCreate()

12-30 07:23:30.062 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onStart()

12-30 07:23:30.062 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onRestoreInstanceState()

12-30 07:23:30.062 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onResume()

12-30 07:23:30.110 5395-5395/com.example.huang.activity_life_cycle D/MainActivity:onWindowFocusChanged()


三、代码


1、AndroidManifest.xml

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="sensor"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

2、layout中的main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="layout"
        android:textColor="@color/colorAccent"
        android:textSize="24sp" />
</RelativeLayout>


3、layout-port中的main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="竖屏"
        android:textColor="@color/colorAccent"
        android:textSize="24sp" />
</RelativeLayout>


4、layout-land中的main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="横屏"
        android:textColor="@color/colorAccent"
        android:textSize="24sp" />
</RelativeLayout>
5、ParcelableData.java
package com.example.huang.activity_life_cycle;

import android.os.Parcel;
import android.os.Parcelable;

import java.util.ArrayList;

/**
 * Created by huang on 2016/12/30.
 */
public class ParcelableData implements Parcelable {
    private String name;
    private int age;
    private ArrayList<String> list;

    public ParcelableData() {
        name = "guest";
        age = 20;
    }

    public ParcelableData(Parcel in) {
        //顺序要和writeToParcel写的顺序一样
        name = in.readString();
        age = in.readInt();
        list = in.readArrayList(ArrayList.class.getClassLoader());
    }

    public ArrayList<String> getList() {
        return list;
    }

    public void setList(ArrayList<String> list) {
        this.list = list;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeList(list);
    }

    public static final Parcelable.Creator<ParcelableData> CREATOR = new Parcelable.Creator<ParcelableData>() {
        public ParcelableData createFromParcel(Parcel in) {
            return new ParcelableData(in);
        }

        public ParcelableData[] newArray(int size) {
            return new ParcelableData[size];
        }
    };

}


6、MainActivity.java
package com.example.huang.activity_life_cycle;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;

import java.util.ArrayList;

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";
    private ArrayList<String> list = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "onCreate()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list.add("aaaa");
        list.add("bbbb");
        list.add("cccc");
        list.add("dddd");
        list.add("eeeee");
    }

    @Override
    protected void onStart() {
        Log.d(TAG, "onStart()");
        super.onStart();
    }

    @Override
    protected void onResume() {
        Log.d(TAG, "onResume()");
        super.onResume();
    }

    @Override
    protected void onRestart() {
        Log.d(TAG, "onRestart()");
        super.onRestart();
    }

    @Override
    protected void onPause() {
        Log.d(TAG, "onPause()");
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        Log.d(TAG, "onDestroy()");
        super.onDestroy();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        Log.d(TAG, "onConfigurationChanged()");
        super.onConfigurationChanged(newConfig);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.d(TAG, "横屏模式");
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.d(TAG, "竖屏模式");
        }
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        Log.d(TAG, "onWindowFocusChanged()");
        super.onWindowFocusChanged(hasFocus);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.d(TAG, "onSaveInstanceState()");
        super.onSaveInstanceState(outState);
        Bundle bundle = new Bundle();
        bundle.putString("MyString", "test bundle");
        ParcelableData parcelableData = new ParcelableData();
        parcelableData.setName("hhhh");
        parcelableData.setAge(28);
        parcelableData.setList(list);
        bundle.putParcelable("MyData", parcelableData);
        outState.putBundle("huangyi", bundle);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        Log.d(TAG, "onRestoreInstanceState()");
        super.onRestoreInstanceState(savedInstanceState);
        Bundle bundle = savedInstanceState.getBundle("huangyi");
        ParcelableData parcelableData = bundle.getParcelable("MyData");
        String testBundleString = bundle.getString("MyString");
        Log.d(TAG, "testBundleString===>" + testBundleString);
        Log.d(TAG, "name=" + parcelableData.getName());
        Log.d(TAG, "age=" + parcelableData.getAge());
        ArrayList<String> parceList = parcelableData.getList();
        for (int i = 0; i < parceList.size(); i++) {
            Log.d(TAG, "====>" + parceList.get(i));
        }
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        Log.d(TAG, "onRetainNonConfigurationInstance()");
        return super.onRetainNonConfigurationInstance();
    }

    @Nullable
    @Override
    public Object getLastNonConfigurationInstance() {
        Log.d(TAG, "getLastNonConfigurationInstance()");
        return super.getLastNonConfigurationInstance();
    }


}




代码地址:http://download.csdn.net/detail/yihuangol/9725926


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值