寬屏適配、禁止截圖和保持螢幕常亮,這三個與螢幕有關的 Android 開發小眾知識,說不定什麼時候就派上用場。
寬屏適配
越來越多的手機廠商趨向於全面屏設計,比如今年出廠的 18.5:9 螢幕比例的三星 Galaxy S8 手機,前兩天剛釋出 18:9 螢幕比例的 OnePlus 5T 手機, 螢幕比例均超過過去常見的 16:9 比例。超大螢幕比例的設計對於 Android App 來說,存在一個螢幕適配的問題。
我們需要在 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 在高螢幕比例裝置中的顯示效果:
左邊為 16:9 的 aspect 設定,右邊為 18.5:9 的設定,同樣使用的是螢幕比例為 18.5:9 的大屏裝置。明顯可以看出,低比例值設定的 App 開啟時螢幕上下均有留白,也就說不能充分利用螢幕空間。
禁止截圖
像支付寶付款二維碼這種對安全要求比較高的介面,應用一般會選擇遮蔽裝置截圖功能。當你同時按下截圖快捷鍵組合(常見為開機鍵 + 音量上鍵)時,系統會自動提示截圖失敗等關聯資訊。
禁止截圖的實現方式並不是很難,在需要設定禁止截圖的 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 面試大牛為你準備的全套面試資料!