Android 5.0 開機(jī)橫屏修改方法
<span style="font-family: Arial, Helvetica, sans-serif;">如果理解了Android的設(shè)計(jì)的原理, 其實(shí)這個(gè)修改原理十分簡單, 比一些網(wǎng)上流出來的粗暴的修改方式既美觀又實(shí)用。</span>
修改分為三部分:
1: 上層(Java)修改
既然設(shè)計(jì)到屏幕的修改, 肯定想到了直接修改WMS(比較粗暴的方式)。
其實(shí)Android的很多的需求都是通過配置文件來的, 這么明顯的設(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)開機(jī)后, 開機(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>;
修改后開機(jī)發(fā)現(xiàn): 開機(jī)畫面啟動后是豎屏的, 運(yùn)行一段時(shí)間變成橫屏, 進(jìn)入鎖屏界面, 也是橫屏, 不用再做橫豎切換。
2: 底層(C++)修改
開機(jī)啟動畫面, 剛開始的時(shí)候是豎屏的。
原因很簡單: 底層的SF初始化的時(shí)候肯定是豎屏的得跟WMS匹配。 所以修改也很簡單。
framework/native/services/surfaceflinger/DisplayDevice.cpp
// initialize the display orientation transform. setProjection(DisplayState::<span style="color:#ff6666;">eOrientation90</span>, mViewport, mFrame);
再開機(jī)發(fā)現(xiàn)問題來了, 開機(jī)畫面顯示有問題, 而且進(jìn)入到鎖屏界面前也會閃一下。
3: Bootanimation 修改
到第二部的修改一直都很順利, 而且分析的效果跟修改后的顯示也是比較相符的。
但是出現(xiàn)的一閃的畫面, 讓我比較苦惱, 一直以為是修改的不夠徹底, 一直找其他初始化的地方是否沒修改, 找了半天沒找到相關(guān)的修改, 因?yàn)閼?yīng)該考慮的地方都已經(jīng)修改了。
所以接下來只能看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申請的時(shí)候是按照豎屏申請的, 這個(gè)時(shí)候我們的屏幕已經(jīng)是橫屏了。
修改后運(yùn)行, 發(fā)現(xiàn)完美解決了開機(jī)橫屏的問題。
對于進(jìn)入鎖屏前一閃的問題: 這個(gè)也是由Bootanimation導(dǎo)致, 因?yàn)锽ootanimation開始的時(shí)候是豎屏, WMS設(shè)置屏幕為橫屏的時(shí)候, Bootanimation還沒有消失, 所以導(dǎo)致了一閃的問題。
抓住這個(gè)修改主線, 不論Android怎么變, 是之前4.0 還是將來的6.0, 都是可以修改的。 (PS: 這里不涉及fastboot的logo的修改, 這個(gè)修改更簡單 替換圖片就可以了)
以上所述是小編給大家介紹的Android 5.0 開機(jī)橫屏修改方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android判斷屏幕是橫屏或是豎屏的簡單實(shí)現(xiàn)方法
- 基于jQuery的判斷iPad、iPhone、Android是橫屏還是豎屏的代碼
- Android如何禁止橫屏豎屏的變換
- Android開發(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基本控件ToggleButton&Switch使用指南
本文給大家匯總介紹了android的2個(gè)基本控件ToggleButton和Switch的使用方法,非常的詳細(xì),有需要的小伙伴可以參考下。2016-01-01
Android App端與PHP Web端的簡單數(shù)據(jù)交互實(shí)現(xiàn)示例
本篇文章主要介紹了Android App端與PHP Web端的簡單數(shù)據(jù)交互實(shí)現(xiàn)示例,詳細(xì)的介紹了交互的代碼,非常具有實(shí)用價(jià)值,有興趣的可以了解一下2017-10-10
在Android中使用SQLite數(shù)據(jù)庫及其操作詳解
在?Android?開發(fā)中,使用?SQLite?數(shù)據(jù)庫是一種常見的持久化數(shù)據(jù)存儲方式,本文將通過代碼示例詳細(xì)講解如何在?Android?中創(chuàng)建數(shù)據(jù)庫表、插入數(shù)據(jù)、執(zhí)行查詢操作以及驗(yàn)證查詢結(jié)果,需要的朋友可以參考下2024-08-08
Flutter實(shí)戰(zhàn)教程之酷炫的開關(guān)動畫效果
這篇文章主要給大家介紹了關(guān)于Flutter實(shí)戰(zhàn)教程之酷炫的開關(guān)動畫效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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)航欄的功能,整體文章大概分為兩部分介紹,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-06-06
Android自定義ViewGroup的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05

