0

我的 DialogFragment 的布局之一使用 aHorizontalScrollView水平滚动它的 child LinearLayout。有没有办法将其宽度锁定到位,以便在 LinearLayout 填充项目后它不会扩展 DialogFragment 的宽度?

这是DialogFragment第一次加载时的样子: DialogFragment - 首次加载

KanjiLinearLayout标题下的项目填充项目时,会发生以下情况: DialogFramgnet - 填充的项目

填充项目后,一切都滚动正常,但我想防止DialogFragment扩展。在根部设置固定宽度HorizontalScrollView可防止其扩展,但考虑到 Android 屏幕的高度可变大小,我想不出一个好的方法。

以下是Kanji下区域的一些代码:

<HorizontalScrollView
    android:layout_height="48dp"
    android:layout_width="match_parent">

    <LinearLayout
        android:id="@+id/grid_kanji"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" />

</HorizontalScrollView>
4

1 回答 1

0

HorizontalScrollView通过将 的宽度设置为对话框首次打开时的宽度,我得到了预期的效果:

// Fix the size of the HorizontalScrollView so it doesn't expand
HorizontalScrollView hsv = (HorizontalScrollView) getDialog().findViewById(R.id.grid_kanji_root);

int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, (float) hsv.getHeight(), getResources().getDisplayMetrics());
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, (float) hsv.getWidth(), getResources().getDisplayMetrics());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(width, height);

hsv.setLayoutParams(lp);

getWidth()getHeight()以像素为单位返回测量值,这就是为什么我TypedValue使用.COMPLEX_UNIT_PX而不是COMPLEX_UNIT_DP.

请注意,您不能这样做,onCreateDialog()因为onResume()返回的宽度将为 0(零)。我最终在函数中运行此代码,该函数LinearLayout使用全局布尔值将光标结果加载到子项中,该布尔值跟踪我是否已经设置了宽度 - 如果是FALSE(如第一次加载对话框时),那么我设置宽度并将布尔值设置为TRUE.

我还发现LayoutParams你应用到一个控件必须匹配元素的类型。由于 myHorizontalScrollView位于 a 内部LinearLayout,因此我不得不申请LinearLayout.LayoutParams它而不是HorizontalScrollView.LayoutParams. 否则你会得到一个ClassCast Exception

于 2013-10-14T16:34:09.277 回答