標籤: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 橫豎屏先關操作