中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中關于屏幕的三個小眾知識(寬屏適配、禁止截屏和保持屏幕常亮)

發布時間:2020-10-07 02:09:02 來源:腳本之家 閱讀:155 作者:亦楓 欄目:移動開發

前言

寬屏適配、禁止截屏和保持屏幕常亮,這三個與屏幕有關的 Android 開發小眾知識,說不定什么時候就派上用場。

寬屏適配

Android的屏幕適配一直以來都在折磨著我們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);

我們來看看Android開發者網站是怎么解釋FLAG_SECURE的:

Android中關于屏幕的三個小眾知識(寬屏適配、禁止截屏和保持屏幕常亮)

意思就是設置了這個flag后, 系統會把當前窗口的內容視為安全隱私內容, 系統會阻止這些內容被截屏或者在不安全可靠的場景顯示出來.

在Google的過程中, 發現這個flag可以實現以下功能:

  • 阻止屏幕截圖
  • 在Recent apps(任務切換界面)中只顯示應用名字和圖標, 不顯示內容
  • Google App的Now on tap功能不會去分析你的頁面的內容

屏幕常亮

通常我們都會設置手機自動調節屏幕亮度或者固定時間后自動鎖屏。然而部分 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 生命周期函數
 ...
});

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永兴县| 西安市| 抚松县| 巴林左旗| 洪雅县| 浑源县| 双辽市| 友谊县| 舒兰市| 衢州市| 江华| 布尔津县| 白水县| 呈贡县| 沛县| 息烽县| 邓州市| 阿鲁科尔沁旗| 赞皇县| 正安县| 达拉特旗| 尉氏县| 雷波县| 独山县| 蓬溪县| 团风县| 青川县| 上饶市| 绥滨县| 寻甸| 乃东县| 全州县| 庆云县| 二连浩特市| 桦川县| 容城县| 沙坪坝区| 崇阳县| 西乡县| 镇赉县| 苏尼特左旗|