0

我正在尝试使用 Horizo​​ntalScrollView 实现水平 ListView 并在代码中添加“项目”。添加项目工作正常。现在我希望每个项目都是 ScrollView 宽度的 1/7,这样我就可以在不滚动的情况下准确显示 7 个项目。我想不出一种方法来获取 Horizo​​ntalScrollView 的宽度。

我的 XML 如下所示:

<HorizontalScrollView
    android:id="@+id/information_popup_dialog_listScrollView"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="7" >

    <LinearLayout
        android:id="@+id/information_popup_dialog_listParent"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:baselineAligned="false"
        android:orientation="horizontal" >
    </LinearLayout>   
</HorizontalScrollView>

我添加一个这样的项目:

LinearLayout listContainer = (LinearLayout) view
            .findViewById(R.id.information_popup_dialog_listParent);
LinearLayout listItem = (LinearLayout) inflater.inflate(
                R.layout.information_popup_dialog_list_item, listContainer,
                false);
listItem.setLayoutParams(new LinearLayout.LayoutParams(
                width, LayoutParams.MATCH_PARENT));
listContainer.addView(listItem);

当我使用 measure() 获取 ScrollView 的宽度时,我得到的是总宽度,而不是可见宽度。所以它随着我添加的每一个项目而不断增长。

HorizontalScrollView scrollView = (HorizontalScrollView) view
                    .findViewById(R.id.information_popup_dialog_listScrollView);
scrollView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
System.out.println("Width: " + scrollView.getMeasuredWidth());

我使用 .getLayoutParams().width / getWidth() 尝试了不同的方法,都返回 0。有没有办法做到这一点?我在 DialogFragment 的 onCreateView() 方法中完成所有这些工作。

4

2 回答 2

0

您可以获取设备的屏幕宽度,然后将其除以 7。现在,将除以屏幕宽度后得到的这个数字设置为您在 Horizo​​ntalScrollView 中每个视图的宽度。这样您就可以在屏幕上显示 7 个项目。

我还没有尝试过,但它应该可以工作并且很容易做到。

于 2013-12-19T07:29:30.187 回答
0

view.getWidth()中使用onViewCreated()LayoutParameters.width将返回您在 XML 中输入的值。

如果它仍然不起作用,那么您需要getWidthview.post()方法内部。这可以确保视图已经布局。

于 2021-12-01T13:12:45.277 回答