【问题标题】:Can I prevent a HorizontalScrollView from expanding?我可以阻止 Horizo​​ntalScrollView 扩展吗?
【发布时间】:2013-10-11 21:00:37
【问题描述】:

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

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

Kanji 标题下的 LinearLayout 填充项目时,会发生以下情况:

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

以下是汉字下区域的一些代码:

<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>

【问题讨论】:

  • 使用android:maxWidth 为特定值还是以编程方式设置?将作为答案发布,但现在无法确认。

标签: android android-layout android-linearlayout horizontalscrollview


【解决方案1】:

通过将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 必须与 元素的类型相匹配。由于我的HorizontalScrollView 位于LinearLayout 内部,因此我必须对其应用LinearLayout.LayoutParams 而不是HorizontalScrollView.LayoutParams。否则你会得到一个ClassCast Exception

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多