如何设置LinearLayout(带有7个TextView Elements)的宽度,它是Horizo​​ntalScrollView的子项,因此一次只能看到4个?

时间:2013-01-15 16:20:40

标签: android android-layout horizontalscrollview

我在Horizo​​ntalScrollView中有一个LinearLayout(带有7个TextView元素)。 Horizo​​ntalScrollView设置为fillViewport。 我希望一次只能看到4个TextView元素。用户可以滚动查看其余部分。

案例1: 我可以使用layout_weight获得所需的布局,但是我无法滚动,如附加代码所示。我假设滚动不起作用,因为在GUI渲染后计算权重,因此Horizo​​ntalScrollLayout的宽度不会改变。是对的吗?

案例2: 如果我修改宽度,例如“60dp”,那么它会根据需要显示,我也可以滚动。但是,这不适用于其他屏幕尺寸。

如何以适用于不同屏幕尺寸的方式实现此效果。

以下是案例1 的代码。

布局:     

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="horizontal" 
        android:weightSum="7">

        <TextView
            style="@style/ViewStyle"
            android:text="1" />

        <TextView
            style="@style/ViewStyle"
            android:text="2" />

        <TextView
            style="@style/ViewStyle"
            android:text="3" />

        <TextView
            style="@style/ViewStyle"
            android:text="4" />

        <TextView
            style="@style/ViewStyle"
            android:text="5" />

        <TextView
            style="@style/ViewStyle"
            android:text="6" />

        <TextView
            style="@style/ViewStyle"
            android:text="7" />
    </LinearLayout>

风格:

<style name="ViewStyle">
    <item name="android:layout_weight">1</item>
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">60dp</item>
    <item name="android:layout_centerVertical">true</item>
    <item name="android:layout_centerHorizontal">true</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">10sp</item>
    <item name="android:textColor">@color/white</item>
</style>

2 个答案:

答案 0 :(得分:2)

使用layout_weight中包含的LinearLayout中的HorizontalScrollView将无法满足您的需求。我建议你做这样的事情:

  1. layout_weight中移除style属性,同时将layout_width修改为某个值(或者您可以使用wrap_content
  2. Runnable方法的一个观看点上发布onCreate,以便像这样更新TextViews的文字:

    // wrapperLinearLayout being your LinearLayout wrapping the 7 TextViews
    wrapperLinearLayout.post(new Runnable() {
    
        @Override
        public void run() {
            // find out the width of the HorizontalScrollView
            HorizontalScrollView hsv = (HorizontalScrollView) wrapperLinearLayout
                    .getParent();
            // the value below will be the new width of all the TextViews so
            // you can see only for initially
            int targetWidth = (hsv.getWidth() / 4) * 7;
            // modify the width of all 7 TextViews
            for (int i = 0; i < wrapperLinearLayout.getChildCount(); i++) {
                LinearLayout.LayoutParams lpc = (android.widget.LinearLayout.LayoutParams) wrapperLinearLayout
                        .getChildAt(i).getLayoutParams();
                lpc.width = targetWidth / 7;
            }
        }
    });
    

答案 1 :(得分:0)

您必须在运行时获取屏幕宽度,然后为文本视图设置宽度。我想这是你能让它发挥作用的唯一方法。