亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何解決橫豎屏切換及其對應布局加載問題

發布時間:2021-08-05 14:16:52 來源:億速云 閱讀:1283 作者:小新 欄目:移動開發

這篇文章將為大家詳細講解有關Android如何解決橫豎屏切換及其對應布局加載問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

具體內容如下

第一,橫豎屏切換連帶橫豎屏布局問題:

如果要讓軟件在橫豎屏之間切換,由于橫豎屏的高寬會發生轉換,有可能會要求不同的布局。

可以通過以下兩種方法來切換布局:

1)在res目錄下建立layout-land和layout-port目錄,相應的layout文件名不變,比如:layout-land是橫屏的layout,layout-port是豎屏的layout,其他的不用管,橫豎屏切換時程序調用Activity的onCreate方法中的setOnContent(xxx),并自動加載相應的布局。

2)假如布局資源不按照如上設置,則可以通過java代碼來判斷當前是橫屏還是豎屏然后來加載相應的xml布局文件。因為當屏幕變為橫屏的時候,系統會重新加載當前Activity的onCreate方法(也就是說:該Activity的生命周期要重頭開始),你可以把以下方法放在你的onCreate中來檢查當前的方向,然后可以讓你的setContentView來載入不同的layout 。

/** 1:豎屏  2:橫屏 判斷屏幕以旋轉的方向 */
  private int orientation;
orientation=getResources().getConfiguration().orientation;

第二,強制設定屏幕的橫、豎屏方向:

Android橫豎屏切換在手機開發中比較常見,很多軟件在開發過程中為了避免橫豎屏切換時引發不必要的麻煩,通常要強制設置橫豎屏的方向,通過在AndroidManifest.xml中設置activity中的android:screenOrientation屬性值來實現。

比如下列設置:

橫屏顯示設置:android:screenOrientation="lanscape"

豎屏顯示設置:android:screenOrientation="portrait"

當然上述修改也可以在Java代碼中通過代碼來實現:(android屏幕的切換會重啟Activity,所以在Activity銷毀前保存當前活動的狀態,并在Activity再次Create的時候載入配置)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

第三,攔截橫豎屏切換 需要的配置文件:onConfigurationChanged

Activity每次橫豎屏切換都會重新調用onPause->onStop-> onDestory->onCreate->onStart->onResume(為此內容和數據要保存和讀取,否則轉屏之前的內容就會消失了)

很多時候這樣的結果讓程序繁瑣,為此Android提供了在manifest中設置android:configChanges屬性,從而讓Activity不延續上述的重建流程;

方式一)在Android工程的Mainfest.xml中配置Activity:android:configChanges="keyboardHidden|orientation ,橫豎屏切換之后就不會去執行OnCreat函數了,而是會去調用onConfigurationChanged()這樣就能控制橫豎屏的切換了。

方式二)用戶可以在Activity或View的:onConfigurationChanged(Configurationnew   Config)  ,函數中獲取當前橫豎屏參數。至于其調用順序跟touch時間的傳遞順序相似,不過他沒有消費事件的概念,會順次調用到每一個onConfigurationChanged函數。

需要重寫Activity的onConfigurationChanged方法。實現方式如下,不需要做太多的內容:

需要注意的是,onConfigurationChanged函數中只能獲得橫豎屏切換后的參數,在該函數中獲取不到新的Layout和控件的尺寸位置信息,如果要處理尺寸和位置信息,必須通過消息異步或者延時調用;

@Override
        public void onConfigurationChanged(Configuration newConfig) {
                super.onConfigurationChanged(newConfig);
                if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                        // land do nothing is ok
                } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
                        // port do nothing is ok
                }
        }

第四,自適應切換屏幕:

如果想讓它啟動的時候是橫屏的話就橫屏表示,縱屏的話就縱屏表示,然后手機切換橫豎屏就不能用了該怎么解決呢?

首先:在Mainfest.xml中追加android:screenOrientation="sensor" android:configChanges="orientation|keyboardHidden"

然后:取得屏幕的長和寬,進行比較設置橫豎屏的變量。

Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    if (width > height) {
      orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; // 橫屏
    } else {
      orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; // 豎屏
    }

然后:在onConfigurationChanged()函數中追加this.setRequestedOrientation(orientation)

public void onConfigurationChanged(Configuration newConfig) { 
         super.onConfigurationChanged(newConfig); 
         this.setRequestedOrientation(orientation); 
       }

但是這樣的話你切到別的畫面的時候再回到原畫面,它就仍然是橫的或者是縱的。怎么讓它從別的屏幕回來后,又重新橫豎屏布局呢?

只要在OnResume()中在設定下就行了,但是這個僅僅只是支持橫豎屏只有一個layout的;

protected void onResume() {
    orientation = ActivityInfo.SCREEN_ORIENTATION_USER;
    this.setRequestedOrientation(orientation);
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    if (width > height) {
      orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
    } else {
      orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
    }
    super.onResume();
  }

有三點請注意

1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次
3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法

關于“Android如何解決橫豎屏切換及其對應布局加載問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

象山县| 涿鹿县| 浙江省| 阳原县| 旬阳县| 盐亭县| 江安县| 宁武县| 清涧县| 延边| 新昌县| 双流县| 准格尔旗| 宜都市| 千阳县| 车致| 鄂尔多斯市| 梁山县| 措勤县| 灵武市| 崇礼县| 榆林市| 拜城县| 松桃| 太保市| 澜沧| 迁西县| 吐鲁番市| 竹北市| 稻城县| 清新县| 莒南县| 定兴县| 三河市| 泌阳县| 普兰店市| 枣强县| 新乡市| 鄂伦春自治旗| 毕节市| 鄯善县|