Android橫豎屏加載不同佈局的適配方案

1.AndroidMenifest.xml裏面的activity需要如下配置使其橫豎屏切換時不會重啓整個activtiy:

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

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

2.分別寫橫豎屏的佈局文件:

activity_main_horizontal.xml

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

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!橫屏" />


</LinearLayout> 

activity_main_vertical.xml

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

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!豎屏" />


</LinearLayout> 

3.在activity中實現對應的加載邏輯:

MainActivity.java

import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.my2048.Utils.LogUtil;

public class MainActivity extends AppCompatActivity {
    private TextView textView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){
            //如果是橫屏了,在這裏設置橫屏的UI
            LogUtil.d("onCreate activity_main_horizontal");
            setContentView(R.layout.activity_main_horizontal);
        }else{
            //否則,在這裏設置豎屏的UI
            LogUtil.d("onCreate activity_main_vertical");
            setContentView(R.layout.activity_main_vertical);
        }

        setViews();

        initData();
    }

    private void initData() {
        textView.setTextColor(Color.RED);
    }

    private void setViews() {
        textView = findViewById(R.id.text);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
            //如果是橫屏了,在這裏設置橫屏的UI
            LogUtil.d("onConfigurationChanged activity_main_horizontal");
            setContentView(R.layout.activity_main_horizontal);
        }else{
            //否則,在這裏設置豎屏的UI
            LogUtil.d("onConfigurationChanged activity_main_vertical");
            setContentView(R.layout.activity_main_vertical);
        }
        setViews();
        initData();
        super.onConfigurationChanged(newConfig);
    }
}

4.實現效果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章