android 橫豎屏先關操作

來源:互聯網
上載者:User

標籤:des   android   style   blog   color   io   使用   ar   檔案   

  今天處理了點關於android橫豎屏的效果,半天下來覺得這個橫豎屏的相關操作還是有很多的,廢話結束--------------

首先看看最常見的橫豎螢幕的控制,在資訊清單檔中可以設定Activity是否支援橫屏,要以什麼樣的方式展示(橫屏、豎屏),常見的設定方式就是在Activity中加上

android:screenOrientation="XXX" ,這樣就能限定該Activity是否的展示方式.
<activity            android:name=".ui.DetailsVideoActivity"            android:hardwareAccelerated="false"            android:label="@string/app_name"            android:screenOrientation="portrait"             android:configChanges="orientation|keyboardHidden|screenSize"            android:theme="@style/Theme.PageIndicatorDefaults" >        </activity>
android:screenOrientation="XXX",一下是XXX的屬性值
“portrait” :縱向顯示(高度>寬度)
“landscape” :橫向顯示(高度<寬度)(這兩種比較常用)
“behind” :與上一個Activity一致
“user”    :與使用者喜好設定一致
“unspecified”:預設,由系統選擇方向(不確定跟隨系統)
“sensor” :跟隨裝置的方向感應器
“fullSensor” :顯示裝置感應器傳來的四個方向 ,這樣設定之後Activity也就會按照這種方式來顯示了。
 -----------------------------------------------------------------------------------------------------
 以上最簡單的設定方式,但是當螢幕由橫屏切換為樹屏、以及由豎屏切換到橫屏的時候的處理往往是讓我們感到棘手的,也正是這裡才是難以處理的。在螢幕狀態切換的時候通常會重新調用各個
生命週期的,相當於重新裝載Activity,這時候資料往往都會消失,但是我們也可以儲存切換時的狀態的在Activity類裡覆寫onConfigurationChanged()方法來儲存當前Activity的狀態(資料)
1 @Override2     protected void onSaveInstanceState(Bundle outState)3     {4         super.onSaveInstanceState(outState);5         outState.putString(Constant.RUL_STORE, webView.getUrl());  //儲存資料6         System.out.println("onSaveInstanceState"  + "---->" + webView.getUrl());7     }

然後使用的時候可以複寫 onRestoreInstanceState方法來擷取之前的狀態(資料):

@Override    protected void onRestoreInstanceState(Bundle savedInstanceState)    {        super.onRestoreInstanceState(savedInstanceState);        if(null!=savedInstanceState)        {            System.out.println("onRestoreInstanceState"  + "---->" + savedInstanceState.getString(Constant.RUL_STORE));            urlStore = savedInstanceState.getString(Constant.RUL_STORE);        }    }

這樣就可以在橫豎屏切換的時候儲存activity的狀態(資料),以便使用。

當然有時候我們不想讓Activity在切換橫豎屏的時候重新調用生命週期,因為這樣很可能丟失當前Activity的狀態,這時候我們就要在資訊清單檔的Activity節點下加上android:configChanges屬性了:

  <activity            android:name="com.lome.jy.MainActivity"            android:configChanges="keyboardHidden|orientation|screenSize"            android:label="@string/app_name" >
 android:configChanges="keyboardHidden|orientation|screenSize" 加上這個之後在橫豎切換的時候就不會重新調用Activity的生命週期了。

android:configChanges的設定對Activity切換橫豎屏的影響還是很大的:

不設定Activity的android:configChanges時,切屏會重新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

設定Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命週期,切橫、豎屏時只會執行一次

設定Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法

 1 /** 2      * onConfigurationChanged 3      * the package:android.content.res.Configuration. 4      * @param newConfig, The new device configuration. 5      * 當裝置配置資訊有改動(比如螢幕方向的改變,實體鍵盤的推開或合上等)時, 6      * 並且如果此時有activity正在運行,系統會調用這個函數。 7      * 注意:onConfigurationChanged只會監測應用程式在AnroidMainifest.xml中通過 8      * android:configChanges="xxxx"指定的配置類型的改動; 9      * 而對於其他配置的更改,則系統會onDestroy()當前Activity,然後重啟一個新的Activity執行個體。10      */11     @Override12     public void onConfigurationChanged(Configuration newConfig) {    13         super.onConfigurationChanged(newConfig);14         // 檢測螢幕的方向:縱向或橫向15         if (this.getResources().getConfiguration().orientation 16                 == Configuration.ORIENTATION_LANDSCAPE) {      23             DisplayMetrics displaysMetrics = new DisplayMetrics();24             this.getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);25             int pixWidth= displaysMetrics.widthPixels;26             int height= displaysMetrics.heightPixels;27             LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(  28                     pixWidth,height-20);29             webView.setLayoutParams(mLayoutParams);30 //            webView.reload();31             webView.refreshDrawableState();33         }34         else if (this.getResources().getConfiguration().orientation 35                 == Configuration.ORIENTATION_PORTRAIT) {36             //當前為豎屏

37 DisplayMetrics displaysMetrics = new DisplayMetrics();38 this.getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);39 int pixWidth= displaysMetrics.widthPixels;40 int height= displaysMetrics.heightPixels;41 LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams( 42 pixWidth,height-20);43 webView.setLayoutParams(mLayoutParams);44 webView.refreshDrawableState();45 }46 //檢測實體鍵盤的狀態47 if (newConfig.hardKeyboardHidden 48 == Configuration.HARDKEYBOARDHIDDEN_NO){ 49 //實體鍵盤處於推出狀態50 } 51 else if (newConfig.hardKeyboardHidden52 == Configuration.HARDKEYBOARDHIDDEN_YES){ 53 //實體鍵盤處於合上狀態54 }55 }

如此一來我們就可以在onConfigurationChanged方法中去監聽手機螢幕的變化,這樣我們能做的事情就有很多了,改變樣式,更改內容 ....

另外可以在這裡有選擇性的設定禁止橫屏(豎屏):

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

 



 

android 橫豎屏先關操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.