欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android屏幕旋轉(zhuǎn)之橫屏豎屏切換的實(shí)現(xiàn)

剛實(shí)現(xiàn)了App內(nèi)手機(jī)橫/豎放置時(shí),屏幕橫/豎屏的切換。記錄一下中間需要的關(guān)鍵信息和實(shí)現(xiàn)過程。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、察哈爾右翼后網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、察哈爾右翼后網(wǎng)絡(luò)營銷、察哈爾右翼后企業(yè)策劃、察哈爾右翼后品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供察哈爾右翼后建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:aaarwkj.com

開門見山的說,實(shí)現(xiàn)屏幕自動(dòng)/手動(dòng)旋轉(zhuǎn)的方式有兩種:

一種是在工程的代碼中定義,這種方式在橫豎屏切換時(shí)執(zhí)行的操作是:銷毀當(dāng)前Activity–根據(jù)新的屏幕尺寸重建Activity。如果不進(jìn)行數(shù)據(jù)存儲(chǔ)的操作,在切換的過程中Activity中的數(shù)據(jù)會(huì)丟失。

另一種是在工程的AndroidManifest.xml中定義,這種定義的方式在某些情況下可以實(shí)現(xiàn)“不銷毀需要橫豎屏的Activity”,因?yàn)檫@種方式不會(huì)銷毀Activity后重建Activity,因此Activity的數(shù)據(jù)不會(huì)丟失。

接下來分別介紹這兩種實(shí)現(xiàn)方式:

方式一:代碼中定義

在需要橫屏的Activity中的onCreate方法內(nèi)添加如下語句,并且要求該語句位于onCreate方法內(nèi)setContentView(**)語句之前。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

上條語句中,常數(shù)SCREEN_ORIENTATION_FULL_SENSOR是決定屏幕如何旋轉(zhuǎn)的參數(shù)??偨Y(jié)所有的參數(shù)對(duì)應(yīng)的功能:

參數(shù)功能
SCREEN_ORIENTATION_BEHIND繼承Activity堆棧中當(dāng)前Activity下面的那個(gè)Activity的方向
SCREEN_ORIENTATION_FULL_SENSOR由重力傳感器決定0/90/180/270°
SCREEN_ORIENTATION_FULL_USER
SCREEN_ORIENTATION_LANDSCAPE始終橫屏
SCREEN_ORIENTATION_PORTRAIT始終豎屏
SCREEN_ORIENTATION_LOCKED鎖定屏幕方向
SCREEN_ORIENTATION_NOSENSOR關(guān)閉重力傳感器對(duì)橫/豎屏的影響
SCREEN_ORIENTATION_REVERSE_LANDSCAPE另一個(gè)方向的橫屏
SCREEN_ORIENTATION_REVERSE_PORTRAIT另一個(gè)方向的豎屏(倒拿手機(jī))
SCREEN_ORIENTATION_SENSOR重力傳感器影響屏幕的方向0/90/270°
SCREEN_ORIENTATION_SENSOR_LANDSCAPE始終橫屏,由重力傳感器決定是哪個(gè)方向的橫屏
SCREEN_ORIENTATION_SENSOR_PORTRAIT始終豎屏,由重力傳感器決定是哪個(gè)方向的豎屏
SCREEN_ORIENTATION_UNSPECIFIED不指定方向,使用默認(rèn)方向
SCREEN_ORIENTATION_USER由用戶和重力傳感器共同決定,詳見文本末端
SCREEN_ORIENTATION_USER_LANDSCAPE用戶和重力傳感器共同決定是哪個(gè)方向的橫屏
SCREEN_ORIENTATION_USER_PORTRAIT用戶和重力傳感器共同決定是哪個(gè)方向的豎屏
UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW當(dāng)屏幕較窄時(shí)導(dǎo)航欄有一部分會(huì)顯示在底部

 由于該方式下橫/豎屏切換時(shí),對(duì)應(yīng)的Activity的數(shù)據(jù)會(huì)丟失,可以在對(duì)應(yīng)的Activity中重寫如下兩個(gè)方法,來保證數(shù)據(jù)不丟失:

@Override
protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  //橫豎屏切換前調(diào)用,保存用戶想要保存的數(shù)據(jù),以下是樣例
  outState.putString("name","yoosir"); 
  outState.putInt("age",24); 
  outState.putBoolean("handsome",true);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // 屏幕切換完畢后調(diào)用用戶存儲(chǔ)的數(shù)據(jù),以下為樣例:
  if(savedInstanceState != null) { 
    int age = savedInstanceState.getInt("age"); 
    String name = savedInstanceState.getString("name"); 
    boolean isHandsome = savedInstanceState.getBoolean("handsome");
  }
}

方式二:在AndroidManifest.xml中定義

在AndroidManifest.xml中對(duì)應(yīng)的Activity屬性定義中配置android:configChanges和screenOrientation。參考的文章中在android:configChanges的配置說的很清楚,我直接把結(jié)論貼出來:

android:configChanges="orientation|keyboardHidden|screenSize"
  • 配置configChanges為以上配置時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法。Activity中的數(shù)據(jù)不會(huì)被銷毀。
  • 不配置configChanges或配置configChanges為非以上配置時(shí),切屏?xí)匦抡{(diào)用當(dāng)前Activity的各個(gè)生命周期。Activity中的數(shù)據(jù)會(huì)被銷毀。

給出示例代碼如下:

<activity android:name=".com.cdsn.SearchActivity"
  ... ...
  android:screenOrientation="sensor"
  android:configChanges="keyboardHidden|orientation|screenSize"
      />

上述代碼中的android:screenOrientation所有可能的參數(shù)配置如下 。

描述
unspecified默認(rèn)值。系統(tǒng)自動(dòng)選擇屏幕方向
behind跟activity堆棧中的下面一個(gè)activity的方向一致
landscape橫屏方向,顯示的寬比高長
portrait豎屏方向,顯示的高比寬長
sensor由設(shè)備的物理方向傳感器決定,如果用戶旋轉(zhuǎn)設(shè)備,這屏幕就會(huì)橫豎屏切換
nosensor忽略物理方向傳感器,這樣就不會(huì)隨著用戶旋轉(zhuǎn)設(shè)備而橫豎屏切換了(”unspecified”設(shè)置除外)
user用戶當(dāng)前首選的方向
reverseLandscapeAPI 9 以上,反向橫屏
reversePortraitAPI 9 以上,反向豎屏
sensorLandscapeAPI 9 以上,橫屏,但是可以根據(jù) 物理方向傳感器來切換正反向橫屏
sensorPortraitAPI 9 以上,豎屏,但是可以根據(jù) 物理方向傳感器來切換正反向豎屏
fullSensorAPI 9 以上,上下左右四個(gè)方向,由物理方向傳感器決定
lockedAPI 18 以上,鎖死當(dāng)前屏幕的方向

上述代碼中的android:configChanges所有可能的參數(shù)配置如下:

描述
mccIMSI移動(dòng)臺(tái)的國家代碼(MCC)發(fā)生變化——一個(gè)SIM被探測到并且更新MCC
mncIMSI移動(dòng)臺(tái)的網(wǎng)絡(luò)代碼(MNC)發(fā)生變化——一個(gè)SIM被探測到并且更新MNC
locale區(qū)域發(fā)生變化——用戶選擇了一個(gè)文本需要顯示的新語言
keyboard鍵盤類型發(fā)生變化——例如:用戶插入了外接鍵盤。
keyboardHidden鍵盤的可訪問性發(fā)生變化——例如:用戶發(fā)現(xiàn)了硬件鍵盤。
screenLayout屏幕布局發(fā)生變化——這個(gè)會(huì)導(dǎo)致顯示不同的Activity。
orientation屏幕方向發(fā)生變化——用戶旋轉(zhuǎn)了屏幕。注意:如果應(yīng)用程序的目標(biāo)API級(jí)別是13或更高(通過屬性minSdkVersion和屬性targetSdkVersion聲明),你也需要聲明配置項(xiàng)screenSize,因?yàn)檫@將在設(shè)備選擇肖像和屏幕方向時(shí)發(fā)生改變。
screenSize當(dāng)前可用屏幕大小發(fā)生變化。這代表一個(gè)當(dāng)前可用大小的變化,和當(dāng)前的比率相關(guān),因此當(dāng)用戶選擇不同的畫面和圖像,會(huì)發(fā)生變化。然而,如果你的程序目標(biāo)API級(jí)別是12或更低,你的Activity總是會(huì)自己處理這個(gè)配置變化(這個(gè)變化不會(huì)引起Activity的重啟,甚至在Android 3.2或更新的設(shè)備上)。在API級(jí)別13里加入的。
smallestScreenSize物理屏幕大小的變化。不管方向的變化,僅僅在實(shí)際物理屏幕打包變化的時(shí)候,如:外接顯示器。這個(gè)配置項(xiàng)的變化引起在smallestWidth configuration里的變化。然而,如果你的程序目標(biāo)API級(jí)別是12或更低,你的Activity將自己處理這個(gè)變化(這個(gè)變化不會(huì)引起Activity的重啟,甚至在Android 3.2或更新的設(shè)備上)在API級(jí)別13里加入的。
layoutDirection布局方向變化。例如書寫方式從左向右(LTR)轉(zhuǎn)換為從右向左(RTL)

配置了以上屬性之后,進(jìn)行橫豎屏切換的Activity的數(shù)據(jù)不會(huì)丟失,如果想根據(jù)不同的屏幕方向來展示不同UI或做不同的事,需要在該Activity中重寫以下方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  // 在這里添加屏幕切換后的操作
}

番外

我按照上述方法,根據(jù)重力傳感器實(shí)現(xiàn)了屏幕旋轉(zhuǎn),雖然可以做到屏幕隨重力傳感器切換,但是發(fā)現(xiàn):無論手機(jī)設(shè)置中“屏幕旋轉(zhuǎn)”或“方向鎖定”是開是關(guān),App內(nèi)的Activity都會(huì)隨著手機(jī)的橫豎方向切換橫豎屏。我想要實(shí)現(xiàn)的是當(dāng)打開“屏幕旋轉(zhuǎn)”時(shí),App內(nèi)的Activity跟隨重力感應(yīng)器;當(dāng)關(guān)閉“屏幕旋轉(zhuǎn)”時(shí),App內(nèi)的Activity固定為默認(rèn)方向。如何做到關(guān)閉重力傳感器時(shí),App亦關(guān)閉屏幕自動(dòng)旋轉(zhuǎn)?

android:screenOrientation="sensor"

改上述代碼為以下代碼

android:screenOrientation="user"

意即:當(dāng)參數(shù)為sensor時(shí),無論是否關(guān)閉“屏幕旋轉(zhuǎn)”設(shè)置,App內(nèi)的特定Activity都會(huì)根據(jù)重力傳感器改變橫豎屏。
當(dāng)參數(shù)為user時(shí),當(dāng)“屏幕旋轉(zhuǎn)”開啟,則特定Activity根據(jù)根據(jù)重力傳感器改變橫豎屏;當(dāng)“屏幕旋轉(zhuǎn)”關(guān)閉,則特定Activity會(huì)固定位默認(rèn)方向(一般為正面豎屏)。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當(dāng)前標(biāo)題:Android屏幕旋轉(zhuǎn)之橫屏豎屏切換的實(shí)現(xiàn)
文章轉(zhuǎn)載:http://aaarwkj.com/article44/iggjhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站軟件開發(fā)、企業(yè)網(wǎng)站制作面包屑導(dǎo)航、網(wǎng)站內(nèi)鏈網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
国产精品久久黑丝诱惑| 日韩精品国产亚洲欧美| 水牛av影视亚洲精品| 国产精品自产拍av在线| 中文欧美一区二区精品| 国产91福利视频在线| 蜜桃午夜精品一区二区三区| 女人被爽到高潮呻吟免费看| 人人看男人的天堂东京| 色婷婷av一区二区三区张| 国产剧免费看视频网站成人| 久久婷婷国产综合精品青草 | 日韩精品少妇一区二区在线看| 青青青久热国产精品视频| 麻豆资源视频在线观看| 国产高潮呻吟久久av| 国产免费av高清在线| 日韩视频精品一区二区| 亚州精品乱码久久电影| 亚洲av午夜福利麻豆av| 成人黄色暖暖韩日视频| 日本国产一区二区精品| 欧美成人精品欧美一级黄片| av免费观看一区二区三区| 亚洲人成网站在线免费看| 精品中文人妻中文字幕| 九九九热免费在线观看| 天天干夜夜操操操操| 日本黄色小网站在线播放| 91av国产一区二区| 最新日本欧美一区二区| 久久精品视频就在久久| 亚洲人的av在线播放| 好吊妞在线新免费视频| 亚洲限制级电影一区二区| 日本高清av一区二区| 欧美国产日韩在线播放| 97成人在线免费视频| 精品人妻av中文字幕乱| 午夜福利片在线观看视频| 九色国产一区二区三区|