最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android 判斷橫豎屏問題的詳解

 更新時(shí)間:2013年06月19日 09:52:35   作者:  
本篇文章是對android中如何判斷橫豎屏的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

Android橫豎屏要解決的問題應(yīng)該就兩個(gè):一。布局問題;二。重新載入問題。
1.布局問題:
如果不想讓軟件在橫豎屏之間切換,最簡單的辦法就是在項(xiàng)目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation屬性,他有以下幾個(gè)參數(shù):
"unspecified"
默認(rèn)值 由系統(tǒng)來判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會(huì)有不同的顯示方向.
"landscape"
橫屏顯示(寬比高要長)
"portrait"
豎屏顯示(高比寬要長)
"user"
用戶當(dāng)前首選的方向
"behind"
和該Activity下面的那個(gè)Activity的方向一致(在Activity堆棧中的)
"sensor"
有物理的感應(yīng)器來決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會(huì)橫豎屏切換。
"nosensor"
忽略物理感應(yīng)器,這樣就不會(huì)隨著用戶旋轉(zhuǎn)設(shè)備而更改了 ( "unspecified"設(shè)置除外 )。
也可以在Java代碼中通過setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);來設(shè)置。
如果要讓軟件在橫豎屏之間切換,由于橫豎屏的高寬會(huì)發(fā)生轉(zhuǎn)換,有可能會(huì)要求不同的布局。可以通過以下方法來切換布局:

1)在res目錄下建立layout-land和layout-port目錄,相應(yīng)的layout文件不變,比如main.xml。layout-land是橫屏的layout,layout-port是豎屏的layout,其他的不用管,模擬器會(huì)自動(dòng)尋找。

2)通過this.getResources().getConfiguration().orientation來判斷當(dāng)前是橫屏還是豎屏然后來加載相應(yīng)的xml布局文件。因?yàn)楫?dāng)屏幕變?yōu)闄M屏的時(shí)候,系統(tǒng)會(huì)重新呼叫當(dāng)前Activity的OnCreate方法,你可以把以下方法放在你的OnCreate中來檢查當(dāng)前的方向,然后可以讓你的SetContentView來載入不同的Layout xml.

復(fù)制代碼 代碼如下:

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.i("info", "landscape");
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.i("info", "portrait");
}

2.重新載入問題。如果不需要從新載入,可以在androidmanifest.xml中加入配置android:configChanges="orientation",配置android:configChanges的作用就是如文檔所說的:Specify one or more configuration changes that the activity will handle itself. If not specified, the activity will be restarted if any of these configuration changes happen in the system。這樣在程序中. Activity就不會(huì)重復(fù)的調(diào)用onCreate()甚至不會(huì)調(diào)用onPause.onResume.只會(huì)調(diào)用一個(gè)onConfigurationChanged(Configuration newConfig)。
–*************其實(shí)在這里我遇到兩個(gè)奇怪的問題,那就是
1.
如果我在android:configChanges中只設(shè)置orientation,他依然會(huì)重新加載,只有設(shè)置了orientation|keyboardHidden它才會(huì)只調(diào)用一個(gè)onConfigurationChanged(Configuration newConfig)

2.當(dāng)橫屏變豎屏的時(shí)候,他會(huì)調(diào)用兩次onConfigurationChanged,而豎屏轉(zhuǎn)橫屏?xí)r他只調(diào)用一次onConfigurationChanged,真是太奇怪了。如果你知道,歡迎留言共同探討*************–
如果需要重新載入,則不需要做任何修改。不過如果需要在重新載入過程中保存之前的操作內(nèi)容或數(shù)據(jù),則需要保存之前的數(shù)據(jù)。然后在activity的onCreate()中取出來。當(dāng)然,如此就不能設(shè)置android:configChanges()了,否則就不會(huì)調(diào)用onCreate()方法。那么數(shù)據(jù)可以保存在哪呢?Android中四種存儲(chǔ)方法都可以,另外,還可以用Android為我們提供了onRetainNonConfigurationInstance()方法來暫時(shí)保存數(shù)據(jù)。
下面為此舉個(gè)例子:
保存臨時(shí)圖片:

復(fù)制代碼 代碼如下:

@Override
public Object onRetainNonConfigurationInstance() { 
final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos]; 
    keepPhotos(list); 
return list; 


之后便可以在activity的onCreate()函數(shù)中實(shí)現(xiàn)重新調(diào)用臨時(shí)文件,在代碼中需要判斷系統(tǒng)是否需要重新加載臨時(shí)文件。以下是放在OnCreate()函數(shù)中加載臨時(shí)文件的代碼:
復(fù)制代碼 代碼如下:

private void loadPhotos() { 
final Object data = getLastNonConfigurationInstance(); 

// The activity is starting for the first time, load the photos from Flickr
if (data == null) { 
        mTask = new GetPhotoListTask().execute(mCurrentPage); 
    } else { 
// The activity was destroyed/created automatically, populate the grid
// of photos with the images loaded by the previous activity
final LoadedPhoto[] photos = (LoadedPhoto[]) data; 
for (LoadedPhoto photo : photos) { 
            addPhoto(photo); 
        } 
    } 


對于大多數(shù)的情況并不需要做如上的操作,所以需要謹(jǐn)慎使用這個(gè)行文,畢竟最好的行為也并不適用于所有情況,如果應(yīng)用的不好反而會(huì)給程序帶來不必要的麻煩。

如果要徹底禁止翻轉(zhuǎn),可以設(shè)置android:screenOrientation的屬性為nosensor,如此就可以忽略重力感應(yīng)帶來的麻煩了。不過不知道為什么,在模擬器上不管用,聽別人說在真機(jī)上是正確的,我沒有真機(jī),等有了真機(jī)再試試看。

相關(guān)文章

最新評論

凤山县| 西藏| 永仁县| 鄄城县| 昭平县| 会理县| 敦煌市| 嫩江县| 济阳县| 绥宁县| 福建省| 余江县| 多伦县| 伊宁市| 万源市| 嘉善县| 石柱| 黄陵县| 清远市| 恩施市| 梨树县| 玉龙| 镇远县| 邵武市| 富锦市| 贞丰县| 霞浦县| 广西| 武陟县| 英超| 平邑县| 方山县| 汉寿县| 安康市| 珲春市| 皮山县| 利辛县| 大埔县| 周至县| 乌海市| 黑河市|