Android 開發中,與屏幕有關的三個小衆知識

寬屏適配、禁止截屏和保持屏幕常亮,這三個與屏幕有關的 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 面試大牛爲你準備的全套面試資料!

相關文章
相關標籤/搜索