国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android中關(guān)于屏幕的三個(gè)小眾知識(shí)(寬屏適配、禁止截屏和保持屏幕常亮)

2019-12-12 01:33:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

寬屏適配、禁止截屏和保持屏幕常亮,這三個(gè)與屏幕有關(guān)的 Android 開(kāi)發(fā)小眾知識(shí),說(shuō)不定什么時(shí)候就派上用場(chǎng)。

寬屏適配

Android的屏幕適配一直以來(lái)都在折磨著我們Android開(kāi)發(fā)者,越來(lái)越多的手機(jī)廠商趨向于全面屏設(shè)計(jì),比如今年出廠的 18.5:9 屏幕比例的三星 Galaxy S8 手機(jī),前兩天剛發(fā)布 18:9 屏幕比例的 OnePlus 5T 手機(jī), 屏幕比例均超過(guò)過(guò)去常見(jiàn)的 16:9 比例。超大屏幕比例的設(shè)計(jì)對(duì)于 Android App 來(lái)說(shuō),存在一個(gè)屏幕適配的問(wèn)題。

我們需要在 Manifest 清單文件中定義一個(gè)更大值的 android.max_aspect 屬性,保證我們的 App 能夠充分利用多余的屏幕空間。

<meta-data  android:name="android.max_aspect" android:value="2.1"/>

max_aspect 屬性表示 App 能夠支持的最大屏幕比例,官方建議我們將該值設(shè)置為 2.1 或者更高的值。

注意:如果你沒(méi)有使用 meta-data 標(biāo)簽設(shè)置 max_aspect 屬性,同時(shí) android:resizeableActivity 屬性值為 true 的話,App 默認(rèn)使用的最大 aspect 默認(rèn)值為 1.8(大約 16:9 的樣子)。

備注: resizeableActivity 屬性在 targetSDKVersion 小于 24 的應(yīng)用中值為 false,其他為 true。

下面這張圖通過(guò)對(duì)比呈現(xiàn)出不同 aspect 值的 App 在高屏幕比例設(shè)備中的顯示效果:

左邊為 16:9 的 aspect 設(shè)置,右邊為 18.5:9 的設(shè)置,同樣使用的是屏幕比例為 18.5:9 的大屏設(shè)備。明顯可以看出,低比例值設(shè)置的 App 打開(kāi)時(shí)屏幕上下均有留白,也就說(shuō)不能充分利用屏幕空間。

禁止截屏

像支付寶付款二維碼這種對(duì)安全要求比較高的界面,應(yīng)用一般會(huì)選擇屏蔽設(shè)備截屏功能。當(dāng)你同時(shí)按下截屏快捷鍵組合(常見(jiàn)為開(kāi)機(jī)鍵 + 音量上鍵)時(shí),系統(tǒng)會(huì)自動(dòng)提示截屏失敗等關(guān)聯(lián)信息。

禁止截屏的實(shí)現(xiàn)方式并不是很難,在需要設(shè)置禁止截屏的 Activity 的生命周期 onCreate() 方法中添加一行代碼即可:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

我們來(lái)看看Android開(kāi)發(fā)者網(wǎng)站是怎么解釋FLAG_SECURE的:

意思就是設(shè)置了這個(gè)flag后, 系統(tǒng)會(huì)把當(dāng)前窗口的內(nèi)容視為安全隱私內(nèi)容, 系統(tǒng)會(huì)阻止這些內(nèi)容被截屏或者在不安全可靠的場(chǎng)景顯示出來(lái).

在Google的過(guò)程中, 發(fā)現(xiàn)這個(gè)flag可以實(shí)現(xiàn)以下功能:

  • 阻止屏幕截圖
  • 在Recent apps(任務(wù)切換界面)中只顯示應(yīng)用名字和圖標(biāo), 不顯示內(nèi)容
  • Google App的Now on tap功能不會(huì)去分析你的頁(yè)面的內(nèi)容

屏幕常亮

通常我們都會(huì)設(shè)置手機(jī)自動(dòng)調(diào)節(jié)屏幕亮度或者固定時(shí)間后自動(dòng)鎖屏。然而部分 App 或者部分頁(yè)面需要保持屏幕常亮,如股票實(shí)時(shí)走勢(shì)頁(yè)面。

實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單,像禁止截屏一樣,在需要的 Activity 的 onCreate() 生命周期方法中添加代碼:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

補(bǔ)充小技巧:

類似設(shè)置禁止截屏和保持屏幕常亮這種依賴生命周期方法的代碼,如果需要應(yīng)用到多個(gè) Activity 的話,可以將其放在 BaseActivity 基類中,避免編寫重復(fù)性代碼。或者還可以借助這個(gè)神奇的 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); } // 這里省略其他相關(guān) Activity 生命周期函數(shù) ...});

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇阳县| 翁牛特旗| 白山市| 鲜城| 馆陶县| 调兵山市| 溧阳市| 常宁市| 缙云县| 巨野县| 扎囊县| 阿拉善盟| 沁阳市| 张家界市| 尖扎县| 嘉善县| 西乌珠穆沁旗| 青田县| 肥东县| 应城市| 米林县| 杭锦后旗| 海丰县| 沽源县| 安义县| 山丹县| 当阳市| 平谷区| 托里县| 河南省| 丰都县| 丘北县| 扬州市| 南开区| 称多县| 曲沃县| 顺平县| 芦溪县| 昂仁县| 邵阳市| 山阴县|