寬屏適配、禁止截屏和保持屏幕常亮,這三個與屏幕有關的 Android 開發小衆知識,說不定何時就派上用場。java
愈來愈多的手機廠商趨向於全面屏設計,好比今年出廠的 18.5:9 屏幕比例的三星 Galaxy S8 手機,前兩天剛發佈 18:9 屏幕比例的 OnePlus 5T 手機, 屏幕比例均超過過去常見的 16:9 比例。超大屏幕比例的設計對於 Android App 來講,存在一個屏幕適配的問題。android
咱們須要在 Manifest 清單文件中定義一個更大值的 android.max_aspect
屬性,保證咱們的 App 可以充分利用多餘的屏幕空間。程序員
<meta-data android:name="android.max_aspect" android:value="2.1"/>
複製代碼
max_aspect 屬性表示 App 可以支持的最大屏幕比例,官方建議咱們將該值設置爲 2.1 或者更高的值。面試
**注意:**若是你沒有使用 meta-data
標籤設置 max_aspect 屬性,同時 android:resizeableActivity
屬性值爲 true 的話,App 默認使用的最大 aspect 默認值爲 1.8(大約 16:9 的樣子)。安全
備註: resizeableActivity 屬性在 targetSDKVersion 小於 24 的應用中值爲 false,其餘爲 true。微信
下面這張圖經過對比呈現出不一樣 aspect 值的 App 在高屏幕比例設備中的顯示效果:ide
左邊爲 16:9 的 aspect 設置,右邊爲 18.5:9 的設置,一樣使用的是屏幕比例爲 18.5:9 的大屏設備。明顯能夠看出,低比例值設置的 App 打開時屏幕上下均有留白,也就說不能充分利用屏幕空間。函數
像支付寶付款二維碼這種對安全要求比較高的界面,應用通常會選擇屏蔽設備截屏功能。當你同時按下截屏快捷鍵組合(常見爲開機鍵 + 音量上鍵)時,系統會自動提示截屏失敗等關聯信息。spa
禁止截屏的實現方式並非很難,在須要設置禁止截屏的 Activity 的生命週期 onCreate()
方法中添加一行代碼便可:設計
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
複製代碼
一般咱們都會設置手機自動調節屏幕亮度或者固定時間後自動鎖屏。然而部分 App 或者部分頁面須要保持屏幕常亮,如股票實時走勢頁面。
實現起來也很簡單,像禁止截屏同樣,在須要的 Activity 的 onCreate()
生命週期方法中添加代碼:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
複製代碼
補充小技巧:
相似設置禁止截屏和保持屏幕常亮這種依賴生命週期方法的代碼,若是須要應用到多個 Activity 的話,能夠將其放在 BaseActivity 基類中,避免編寫重複性代碼。或者還能夠藉助這個神奇的 Activity 生命週期接口:
ActivityLifecycleCallbacks
在自定義 Application 類 onCreate()
方法中添加:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
// 這裏省略其餘相關 Activity 生命週期函數
...
});
複製代碼
關於我:亦楓,博客地址:yifeng.studio/,新浪微博:IT亦楓
微信掃描二維碼,歡迎關注個人我的公衆號:安卓筆記俠
不只分享個人原創技術文章,還有程序員的職場遐想
彩蛋:公衆號回覆關鍵字「面試資料」,獲取 BAT 面試大牛爲你準備的全套面試資料!
![]()