Вручную настроить значения DisplayInfo.smallestNominalAppHeight и DisplayInfo.smallestNominalAppWidth?

Поэтому я продолжал получать эти значения / изменения конфигурации прямо до запуска моего приложения, как указано в моем logcat:

01-10 01:49:30.130 519-519/system_process I/ActivityManager: Config changes=1df8 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1080dp 160dpi xlrg long land ?uimode ?night -touch -keyb/v/h -nav/h s.2}
01-10 01:49:30.150 519-519/system_process I/ActivityManager: Config changes=400  {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1055dp 160dpi xlrg long land ?uimode ?night -touch -keyb/v/h -nav/h s.3}
01-10 01:49:31.860 519-519/system_process I/ActivityManager: Config changes=200 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1055dp 160dpi xlrg long land -touch -keyb/v/h -nav/h s.4}
01-10 01:49:40.130 519-558/system_process I/ActivityManager: Config changes=8 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1055dp 160dpi xlrg long land finger -keyb/v/h -nav/h s.5}
01-10 01:50:04.120 519-532/system_process I/ActivityManager: Config changes=480 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1080dp h1895dp 160dpi xlrg long port finger -keyb/v/h -nav/h s.6}

Я знаю что configChanges= Значения означают на основе страницы разработчика Android здесь, но я хотел бы подвергнуть сомнению изменения высоты от начального значения высоты дисплея 1080dp до 1055dp для следующих 3 изменений конфигурации, а затем до последнего списка 1895dp. По сути, он обнаруживает USB-сенсорный экран и пытается перерисовать WxH окна приложения.

Проблема в том, что в моем приложении я setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) или же setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) и даже в моем AndroidManifest.xml все теги правильно размещены внутри:

android:configChanges="mnc|keyboard|keyboardHidden|navigation|orientation|screenSize|screenLayout|touchscreen"
android:screenOrientation="portrait"

но мой layout.xml по какой-то причине переинициализируется с 1080x1920 (первоначально 1920x1080, но мое приложение меняет ориентацию) на 1080x1895! Мой layout.xml:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/parentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black"
    android:layout_gravity="center"
    android:keepScreenOn="true"
    tools:context=".MyActivity" >
    <RelativeLayout
        android:id="@+id/childLayout"
        android:layout_width="fill_parent"
        android:layout_height="1550dp"
        android:background="@color/black">
        <VideoView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginBottom="228dp"
            android:src="@raw/my_video" />
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/backgroundFrame"
        android:layout_width="fill_parent"
        android:layout_height="600dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:background="@color/black">
        <ToggleButton
            android:id="@+id/bOrientation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:background="@color/blue"
            android:textOff="Not Flipped"
            android:textOn="Flipped"/>     
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="180dp"
            android:layout_gravity="top|center_horizontal">
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="120dp"
                android:layout_height="120dp"
                android:layout_gravity="center_vertical|center_horizontal"
                android:layout_marginBottom="20dp"
                android:background="@color/trans"
                android:src="@drawable/my_image" />
        </FrameLayout>
    </RelativeLayout>
</RelativeLayout>

Итак, я понятия не имею, почему, когда мое приложение запускается, даже несмотря на то, что родственник по имени backgroundFrame имеет imageView, идеально ориентированный в портретной ориентации, видео, воспроизводимое в VideoView, растягивается далеко за пределы экрана, как в ландшафтный режим. Он пытается заполнить значение высоты 1895dp, в то время как другой макет backgroundFrame - нет! Я больше посмотрел, откуда исходит это значение 1895dp, может быть, я мог бы переопределить его, что я пытался сделать, используя onSavedInstanceState() а также OnConfigurationChanged() но всякий раз, когда я обнаруживал новое изменение ориентации и пытался вручную сбросить его до 1920, сделав это:

    newConfig.screenHeightDp = 1920;
    Log.d("CONFIG CHANGE2","HeightDP: " + newConfig.screenHeightDp);
    heightPixels = newConfig.screenHeightDp;
    this.getResources().getDisplayMetrics().heightPixels = 1920;
    this.getResources().getConfiguration().screenHeightDp = 1920;
    this.getResources().updateConfiguration(context.getResources().getConfiguration(), context.getResources().getDisplayMetrics());

Но изменения не сохраняются при загрузке, как для onSavedInstance, так и для onConfigurationChanged. Когда я делаю dumpsys, это то, что я нахожу для отображения содержимого диспетчера окон:

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1920x1080 160dpi cur=1080x1920 app=1080x1920 rng=1080x1055-1920x1895
     layoutNeeded=false

Диапазон говорит о том, что показ может быть от 1055 до 1895, то есть из источника, что это значение относится к наименьшим значениям nominalAppHeight и наибольших номинальных значений AppHeight, перечисленных в вопросе. Есть ли способ для меня, чтобы иметь возможность изменить эти DisplayInfo значения в приложении???

0 ответов