0

我在 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>
4

2 回答 2

2

使用layout_weightin aLinearLayout包裹在 aHorizontalScrollView中并不适合您想要的。我建议你这样做:

  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;
            }
        }
    });
    
于 2013-01-16T08:44:22.740 回答
0

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

于 2013-01-15T16:24:17.900 回答