gpt4 book ai didi

android - 如何在 onConfigurationChanged 中获取根布局的新宽度/高度?

转载 作者:IT老高 更新时间:2023-10-28 23:08:35 25 4
gpt4 key购买 nike

我们的一个 View 有一个 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 解决这个问题,但我觉得我们缺少一个简单的解决方案。

最佳答案

对于那些寻求更详细的解决方案描述的人:您可以使用 View 的 ViewTreeObserver 并注册一个 OnGlobalLayoutListener

@Override
public void onConfigurationChanged(Configuration newConfiguration) {
super.onConfigurationChanged(newConfiguration);
final View view = findViewById(R.id.scrollview);

ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
Log.v(TAG,
String.format("new width=%d; new height=%d", view.getWidth(),
view.getHeight()));
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}

关于android - 如何在 onConfigurationChanged 中获取根布局的新宽度/高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com