Android 開發中,與螢幕有關的三個小眾知識

亦楓發表於2017-12-06

寬屏適配、禁止截圖和保持螢幕常亮,這三個與螢幕有關的 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 在高螢幕比例裝置中的顯示效果:

Android 開發中,與螢幕有關的三個小眾知識

左邊為 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 面試大牛為你準備的全套面試資料!

Android 開發中,與螢幕有關的三個小眾知識

相關文章