Android 5.0 開(kāi)機(jī)橫屏修改方法
<span style="font-family: Arial, Helvetica, sans-serif;">如果理解了Android的設(shè)計(jì)的原理, 其實(shí)這個(gè)修改原理十分簡(jiǎn)單, 比一些網(wǎng)上流出來(lái)的粗暴的修改方式既美觀又實(shí)用。</span>
修改分為三部分:
1: 上層(Java)修改
既然設(shè)計(jì)到屏幕的修改, 肯定想到了直接修改WMS(比較粗暴的方式)。
其實(shí)Android的很多的需求都是通過(guò)配置文件來(lái)的, 這么明顯的設(shè)計(jì)需求只要去找相應(yīng)的配置就可以了。
core/res/res/values/config.xml
<bool name="config_supportAutoRotation"><span style="color:#ff0000;">false</span></bool> <integer name="config_lidOpenRotation"><span style="color:#ff0000;">90</span></integer>
修改后發(fā)現(xiàn)開(kāi)機(jī)后, 開(kāi)機(jī)畫面是橫屏顯示的,進(jìn)入鎖屏界面, 屏幕做了一次旋轉(zhuǎn)操作, 這個(gè)時(shí)候窗口才真正的橫屏。
跟需求還不一樣, 進(jìn)入鎖屏前需要橫屏。
所以需要修改WMS的默認(rèn)方向。
/services/core/Java/com/Android/server/wm/WindowManagerService.Java
int mRotation = <span style="color:#ff0000;">1</span>;
修改后開(kāi)機(jī)發(fā)現(xiàn): 開(kāi)機(jī)畫面啟動(dòng)后是豎屏的, 運(yùn)行一段時(shí)間變成橫屏, 進(jìn)入鎖屏界面, 也是橫屏, 不用再做橫豎切換。
2: 底層(C++)修改
開(kāi)機(jī)啟動(dòng)畫面, 剛開(kāi)始的時(shí)候是豎屏的。
原因很簡(jiǎn)單: 底層的SF初始化的時(shí)候肯定是豎屏的得跟WMS匹配。 所以修改也很簡(jiǎn)單。
framework/native/services/surfaceflinger/DisplayDevice.cpp
// initialize the display orientation transform. setProjection(DisplayState::<span style="color:#ff6666;">eOrientation90</span>, mViewport, mFrame);
再開(kāi)機(jī)發(fā)現(xiàn)問(wèn)題來(lái)了, 開(kāi)機(jī)畫面顯示有問(wèn)題, 而且進(jìn)入到鎖屏界面前也會(huì)閃一下。
3: Bootanimation 修改
到第二部的修改一直都很順利, 而且分析的效果跟修改后的顯示也是比較相符的。
但是出現(xiàn)的一閃的畫面, 讓我比較苦惱, 一直以為是修改的不夠徹底, 一直找其他初始化的地方是否沒(méi)修改, 找了半天沒(méi)找到相關(guān)的修改, 因?yàn)閼?yīng)該考慮的地方都已經(jīng)修改了。
所以接下來(lái)只能看Bootanimation了。
終于發(fā)現(xiàn)了原因:
status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &<span style="color:#ff0000;">dinfo</span>);
// create the native surface
sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),
dinfo<span style="color:#ff0000;">.h</span>, dinfo<span style="color:#ff0000;">.w</span>, PIXEL_FORMAT_RGB_565);
Surface申請(qǐng)的時(shí)候是按照豎屏申請(qǐng)的, 這個(gè)時(shí)候我們的屏幕已經(jīng)是橫屏了。
修改后運(yùn)行, 發(fā)現(xiàn)完美解決了開(kāi)機(jī)橫屏的問(wèn)題。
對(duì)于進(jìn)入鎖屏前一閃的問(wèn)題: 這個(gè)也是由Bootanimation導(dǎo)致, 因?yàn)锽ootanimation開(kāi)始的時(shí)候是豎屏, WMS設(shè)置屏幕為橫屏的時(shí)候, Bootanimation還沒(méi)有消失, 所以導(dǎo)致了一閃的問(wèn)題。
抓住這個(gè)修改主線, 不論Android怎么變, 是之前4.0 還是將來(lái)的6.0, 都是可以修改的。 (PS: 這里不涉及fastboot的logo的修改, 這個(gè)修改更簡(jiǎn)單 替換圖片就可以了)
以上所述是小編給大家介紹的Android 5.0 開(kāi)機(jī)橫屏修改方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android判斷屏幕是橫屏或是豎屏的簡(jiǎn)單實(shí)現(xiàn)方法
- 基于jQuery的判斷iPad、iPhone、Android是橫屏還是豎屏的代碼
- Android如何禁止橫屏豎屏的變換
- Android開(kāi)發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼
- Android禁止橫屏豎屏切換的有效方法
- Android 4.4.2 橫屏應(yīng)用隱藏狀態(tài)欄和底部虛擬鍵的方法
- Android強(qiáng)制設(shè)定橫屏?xí)r,SurfaceView一直黑屏
- android橫豎屏切換時(shí)候Activity的生命周期
- Android編程判斷橫屏、豎屏及設(shè)置橫豎屏的方法
相關(guān)文章
Android小知識(shí)之OkHttp的2種請(qǐng)求方式詳解
OkHttp可以說(shuō)是如今最為流行的網(wǎng)絡(luò)請(qǐng)求框架之一,下面這篇文章主要給大家介紹了關(guān)于Android小知識(shí)之OkHttp的2種請(qǐng)求方式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-10-10
android基本控件ToggleButton&Switch使用指南
本文給大家匯總介紹了android的2個(gè)基本控件ToggleButton和Switch的使用方法,非常的詳細(xì),有需要的小伙伴可以參考下。2016-01-01
Android App端與PHP Web端的簡(jiǎn)單數(shù)據(jù)交互實(shí)現(xiàn)示例
本篇文章主要介紹了Android App端與PHP Web端的簡(jiǎn)單數(shù)據(jù)交互實(shí)現(xiàn)示例,詳細(xì)的介紹了交互的代碼,非常具有實(shí)用價(jià)值,有興趣的可以了解一下2017-10-10
在Android中使用SQLite數(shù)據(jù)庫(kù)及其操作詳解
在?Android?開(kāi)發(fā)中,使用?SQLite?數(shù)據(jù)庫(kù)是一種常見(jiàn)的持久化數(shù)據(jù)存儲(chǔ)方式,本文將通過(guò)代碼示例詳細(xì)講解如何在?Android?中創(chuàng)建數(shù)據(jù)庫(kù)表、插入數(shù)據(jù)、執(zhí)行查詢操作以及驗(yàn)證查詢結(jié)果,需要的朋友可以參考下2024-08-08
Flutter實(shí)戰(zhàn)教程之酷炫的開(kāi)關(guān)動(dòng)畫效果
這篇文章主要給大家介紹了關(guān)于Flutter實(shí)戰(zhàn)教程之酷炫的開(kāi)關(guān)動(dòng)畫效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
玩轉(zhuǎn)Kotlin 徹底弄懂Lambda和高階函數(shù)
這篇文章主要幫助大家徹底弄懂Lambda和高階函數(shù),玩轉(zhuǎn)Kotlin,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
android中Invalidate和postInvalidate的更新view區(qū)別
Android中實(shí)現(xiàn)view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI線程自身中使用,而后者在非UI線程中使用,感興趣的朋友可以了解下哦2013-01-01
Android 中使用RadioGroup和Fragment實(shí)現(xiàn)底部導(dǎo)航欄的功能
這篇文章主要介紹了Android 中使用RadioGroup+Fragment實(shí)現(xiàn)底部導(dǎo)航欄的功能,整體文章大概分為兩部分介紹,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-06-06
Android自定義ViewGroup的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05

