Вручную настроить значения DisplayInfo.smallestNominalAppHeight и DisplayInfo.smallestNominalAppWidth? - PullRequest
0 голосов
/ 14 февраля 2019

Поэтому я продолжал получать эти значения / изменения конфигурации прямо перед тем, как мое приложение запустилось, как указано в моей 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>

Итак, я понятия не имею, почему, когда мое приложение запускается, несмотря на то, что родственникLayout с именем 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, то есть от источника ,что это значение относится к наименьшим значениямinalAppHeight и наибольшим значениям nominalAppHeight, перечисленным в вопросе.Есть ли способ для меня, чтобы иметь возможность изменить эти DisplayInfo значения в приложении ???

...