Вручную настроить значения 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
значения в приложении???