Как получить НОВУЮ ширину/высоту корневого расположения в onConfigurationChanged?

Одно из наших представлений имеет a ScrollView как его корневое расположение. Когда устройство повернуто и onConfigurationChanged() назван, мы хотели бы смочь добраться ScrollViewновая ширина/высота. Наш код похож на это:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    Log.d(TAG, "Width: '" + findViewById(R.id.scrollview).getWidth() + "'");
    Log.d(TAG, "Height: '" + findViewById(R.id.scrollview).getHeight() + "'");

    super.onConfigurationChanged(newConfig);

    Log.d(TAG, "Width: '" + findViewById(R.id.scrollview).getWidth() + "'");
    Log.d(TAG, "Height: '" + findViewById(R.id.scrollview).getHeight() + "'");
}

Соответствующий раздел нашего AndroidManifest.xml похож на это:

<activity android:name=".SomeActivity"
    android:configChanges="keyboardHidden|orientation">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    </intent-filter>
</activity>

И наконец, соответствующая часть нашего расположения похожа на это:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollview"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    >
    <LinearLayout android:id="@+id/container"
        android:orientation="vertical"
        android:layout_height="fill_parent"
        android:minHeight="200dip"
        android:layout_width="fill_parent"
        >

На нашем Droid мы ожидали видеть, что ширина ScrollView переходит в 854, при переключении в среду, и к 480, когда переключено назад к портрету (и высота делают эквивалентный переключатель, минус строка меню). Однако мы видим противоположное. Вот наш LogCat:

// Switching to landscape:
03-26 11:26:16.490: DEBUG/ourtag(17245): Width: '480'  // Before super
03-26 11:26:16.490: DEBUG/ourtag(17245): Height: '778' // Before super
03-26 11:26:16.529: DEBUG/ourtag(17245): Width: '480'  // After super
03-26 11:26:16.536: DEBUG/ourtag(17245): Height: '778' // After super

// Switching to portrait:
03-26 11:26:28.724: DEBUG/ourtag(17245): Width: '854'  // Before super
03-26 11:26:28.740: DEBUG/ourtag(17245): Height: '404' // Before super
03-26 11:26:28.740: DEBUG/ourtag(17245): Width: '854'  // After super
03-26 11:26:28.740: DEBUG/ourtag(17245): Height: '404' // After super

Очевидно, мы получаем размеры портрета, когда мы переключаемся для озеленения, и альбомные размеры, когда мы переключаемся на портрет. Есть ли что-то, что мы делаем неправильно? Мы могли получить hacky и решить это, но я чувствую, что существует простое решение, которое мы пропускаем.

20
задан jakeboxer 26 March 2010 в 16:00
поделиться

1 ответ

getWidth () возвращает ширину по мере размещения View, что означает, что вам нужно подождать, пока оно не отобразится на экране. onConfigurationChanged вызывается перед перерисовкой представления для новой конфигурации, поэтому я не думаю, что вы сможете получить новую ширину позже.

7
ответ дан 29 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: