экран Android челки, полный экран экран падения адаптации

Теперь размер экрана на рынке, а также широкий выбор программ полноэкранных. Здесь я использую диаграмму, чтобы проиллюстрировать просо: два экрана может быть совместно именуемый экраном бахромы, но для небольшой правой стороны челки, промышленность обычно называют экран капель воды или пик вдов. Для простоты объяснения, именуемый в дальнейшем «челке экрана» «область бахромы» все они относятся к тому же времени на мнения двух экранов.

Ль экран, полная адаптация экрана деталь экрана падения

Когда мы говорим о экранизации, а именно то, что мы говорим об этом?

  • Адаптация дольше экран

  • Предотвратить содержимое челку

Первая точкой является то, что все приложения требуют адаптаций, максимальное соотношение сторон, соответствующее следующих утверждения, а вторая точка, если само приложение не нуждается дисплей полного экрана или использовать строку состояния погружения приспособлено не требуются.

Для применений, требующих второй точку подгонки, мы должны получить положение и ширину и высоту полосы, а содержание дисплея можно избежать.

Отказ от максимального соотношения сторон

Бывший генеральный экран с соотношением сторон 16: 9, полноэкранный экран телефона соотношение сторон сильно увеличилось, если не подходит, то это будет выглядеть примерно так:

режим адаптации

Есть два способа адаптации:

  1. Версия targetSdkVersion устанавливается на API 24 и более;

Эта операция будет для <application> тега неявно добавить атрибут, андроид: resizeableActivity = «истина» , будет позже Это свойство подробно описано.

  1. <Применение> метки добавляются атрибуты: Android: resizeableActivity = «FALSE», в то время как увеличение в мета- узле>

 <!-- Render on full screen up to screen aspect ratio of 2.4 --> <!-- Use a letterbox on screens larger than 2.4 --> <meta-data android:name="android.max_aspect" android:value="2.4" />

обоснование

В Android 7.0 (уровень API 24) или более поздней приложения, Android: resizeableActivity собственности по умолчанию верно (соответствующий режиму адаптации 1). Это свойство управляется дисплей мульти-окна, определяет текущее приложение или активность поддерживает несколько окон.

Вы можете перечислить <activity>или  <application>установить узел свойств, включить или отключить отображение мульти-окна, настраивается следующим образом :

android:resizeableActivity=["true" | "false"]

Если это свойство имеет значение истина, активность будет активирована разделенного экрана и режим свободной формы. Если это свойство имеет значение ложь, активность не будет поддерживать многопользовательский режим окна. Если значение является ложным, и пользователь пытается запустить активность в режиме нескольких окон, полный экран будет активность.

Режим 2 является адаптацией установить максимальное соотношение сторон экрана, это способ установить официальное предложение. Если вы установите максимальное соотношение сторон, должно Android: resizeableActivity = «ложь». В противном случае, максимальное соотношение сторон без эффекта.

Экранизация Лю

Android9.0 адаптация

Android-P (9,0) начало, официальное начало рыть отверстия для официальной адаптации экрана API, в частности, см дисплей поддержки вырезы. DisplayCutout класс обеспечивается Android P, можно определить положение и форму нефункциональных регионов, эти регионы не должны отображаться содержимое. Для того, чтобы определить, есть ли Выемка область экрана и его расположение, используйте функцию getDisplayCutout ().

Новые свойства макета окна layoutInDisplayCutoutMode сделать ваше приложение может быть уложено на содержание вокруг экрана устройства надреза. Вы можете использовать это свойство для одного из следующих значений:

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

Значение по умолчанию равно LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, бахрома область без отображения может быть установлен на значение, необходимое на дисплее LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES.

Вы можете имитационное экран следующим образом бороздки на любом устройстве или эмуляторе под управлением Android Р:

  1. Включить Параметры разработчика;

  2. На экране опций для разработчиков, прокрутите вниз до раздела Рисование и выберите Имитировать дисплей с прорезью.

Ссылочный пример адаптирован:

// 延伸显示区域到刘海 WindowManager.LayoutParams lp = window.getAttributes(); lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; window.setAttributes(lp); // 设置页面全屏显示 final View decorView = window.getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

Отличающееся тем, что область отображения распространяется на код интерференционных полос, может быть достигнуто путем изменения приложений активности или стиля, например:

 <?xml version="1.0" encoding="utf-8"?> <resources>     <style name="AppTheme" parent="xxx">         <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>     </style> </resources>

Адаптер Android O

Благодаря официальной схеме адаптации Android P Google был запущен, так что Android O (8,0 версия) оборудование, различные производители имеют свои собственные реализации.

адаптер Huawei Android O

Вариант первый:

  1. Подробное описание следующим образом:

<meta-data android:name="android.notch_support" android:value="true"/>
  1. Заявка на вступление в силу, что означает, что все страницы, то система не будет делать правильное применение специальной обработки вниз специального портрета или пейзажа сцены сцены. Например:

<application     android:allowBackup="true"     android:icon="@mipmap/ic_launcher"     android:label="@string/app_name"     android:roundIcon="@mipmap/ic_launcher_round"     android:testOnly="false"     android:supportsRtl="true"     android:theme="@style/AppTheme">     <meta-data android:name="android.notch_support" android:value="true"/>     <activity android:name=".MainActivity">         <intent-filter>             <action android:name="android.intent.action.MAIN"/>             <category android:name="android.intent.category.LAUNCHER"/>         </intent-filter> </activity>
  1. Активность для вступления в силу, а это означает, что вы можете быть челке экранизации для одной страницы установите активность системы собственности не будет делать специальное лечение. Например:

<application     android:allowBackup="true"     android:icon="@mipmap/ic_launcher"     android:label="@string/app_name"     android:roundIcon="@mipmap/ic_launcher_round"     android:testOnly="false"     android:supportsRtl="true"     android:theme="@style/AppTheme">     <activity android:name=".MainActivity">         <intent-filter>             <action android:name="android.intent.action.MAIN"/>              <category android:name="android.intent.category.LAUNCHER"/>         </intent-filter>     </activity>     <activity android:name=".LandscapeFullScreenActivity" android:screenOrientation="sensor">     </activity>     <activity android:name=".FullScreenActivity">         <meta-data android:name="android.notch_support" android:value="true"/>     </activity> </application>

Вариант второй: для применения в сущности, означает , что все страницы, то система не будет делать правильное применение специальной обработки вниз специального портрета или пейзажа сцены сцены.

1, установить окно приложения, используя область бахромы челки в Huawei экран телефона.

/*刘海屏全屏显示FLAG*/ public static final int FLAG_NOTCH_SUPPORT=0x00010000; /**  * 设置应用窗口在华为刘海屏手机使用刘海区  * @param window 应用页面window对象  */ public static void setFullScreenWindowLayoutInDisplayCutout(Window window) {     if (window == null) {         return;     }     WindowManager.LayoutParams layoutParams = window.getAttributes();     try {         Class layoutParamsExCls = Class.forName("com.huawei.android.view.LayoutParamsEx");         Constructor con=layoutParamsExCls.getConstructor(LayoutParams.class);         Object layoutParamsExObj=con.newInstance(layoutParams);         Method method=layoutParamsExCls.getMethod("addHwFlags", int.class);         method.invoke(layoutParamsExObj, FLAG_NOTCH_SUPPORT);     } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |InstantiationException      | InvocationTargetException e) {         Log.e("test", "hw add notch screen flag api error");     } catch (Exception e) {         Log.e("test", "other Exception");     } }

2. Очистить добавил Huawei челка экрана флага, восстановление приложения не используют челку области отображения.

 public static void setNotFullScreenWindowLayoutInDisplayCutout (Window window) {     if (window == null) {         return;     }     WindowManager.LayoutParams layoutParams = window.getAttributes();     try {         Class layoutParamsExCls = Class.forName("com.huawei.android.view.LayoutParamsEx");         Constructor con=layoutParamsExCls.getConstructor(LayoutParams.class);         Object layoutParamsExObj=con.newInstance(layoutParams);         Method method=layoutParamsExCls.getMethod("clearHwFlags", int.class);         method.invoke(layoutParamsExObj, FLAG_NOTCH_SUPPORT);     } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |InstantiationException      | InvocationTargetException e) {         Log.e("test", "hw clear notch screen flag api error");     } catch (Exception e) {         Log.e("test", "other Exception");     } }

Адаптер Просо Android O

  1. Определите экран ли челка.

 private static boolean isNotch() {     try {         Method getInt = Class.forName("android.os.SystemProperties").getMethod("getInt", String.class, int.class);         int notch = (int) getInt.invoke(null, "ro.miui.notch", 0);         return notch == 1;     } catch (Throwable ignore) {     }     return false; }
  1. Установите область дисплея к краю

@Override public void setDisplayInNotch(Activity activity) {     int flag = 0x00000100 | 0x00000200 | 0x00000400;     try {         Method method = Window.class.getMethod("addExtraFlags",                 int.class);         method.invoke(activity.getWindow(), flag);     } catch (Exception ignore) {     } }
  1. Получить челки ширину и высоту

public static int getNotchHeight(Context context) {     int resourceId = context.getResources().getIdentifier("notch_height", "dimen", "android");     if (resourceId > 0) {         return context.getResources().getDimensionPixelSize(resourceId);     }     return 0; } public static int getNotchWidth(Context context) {     int resourceId = context.getResources().getIdentifier("notch_width", "dimen", "android");     if (resourceId > 0) {         return context.getResources().getDimensionPixelSize(resourceId);     }     return 0; }

Адаптер OPPO Android O

  1. Определите экран ли челка

@Override public boolean hasNotch(Activity activity) {     boolean ret = false;     try {         ret = activity.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");     } catch (Throwable ignore) {     }     return ret; }
  1. Получение координат левый и правый углы челкой

private static String getScreenValue() {     String value = "";     Class<?> cls;     try {         cls = Class.forName("android.os.SystemProperties");         Method get = cls.getMethod("get", String.class);         Object object = cls.newInstance();         value = (String) get.invoke(object, "ro.oppo.screen.heteromorphism");     } catch (Throwable ignore) {     }     return value; }

Продукт немного Библиотека http://www.pinlue.com/

 

 

рекомендация

отblog.csdn.net/yihuliunian/article/details/91353604