我在HorizontalScrollView中有一个LinearLayout(带有7个TextView元素)。 HorizontalScrollView设置为fillViewport。 我希望一次只能看到4个TextView元素。用户可以滚动查看其余部分。
案例1: 我可以使用layout_weight获得所需的布局,但是我无法滚动,如附加代码所示。我假设滚动不起作用,因为在GUI渲染后计算权重,因此HorizontalScrollLayout的宽度不会改变。是对的吗?
案例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>
答案 0 :(得分:2)
使用layout_weight
中包含的LinearLayout
中的HorizontalScrollView
将无法满足您的需求。我建议你做这样的事情:
layout_weight
中移除style
属性,同时将layout_width
修改为某个值(或者您可以使用wrap_content
)在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)
您必须在运行时获取屏幕宽度,然后为文本视图设置宽度。我想这是你能让它发挥作用的唯一方法。