始终在Horizo​​ntalScrollView中显示3个按钮

时间:2015-02-26 18:13:32

标签: android button horizontalscrollview programmatically-created

3 buttons scrollview

大家好我试图在android上显示3到X按钮。 我们的想法总是从3个按钮开始,每个按钮占据屏幕尺寸的33%(宽度),并能够通过项目滚动 Horizo​​ntaly

这些项目也将以编程方式添加到视图中。

我试图将Horizo​​ntalLaout水平放在Horizo​​ntalScrollView中。 然后将addchild添加到linearlayout。但是项目调整大小并且不会滚动。

这是正确的方法吗?或者有没有人知道如何制作它?

Class.java

HomeCircledButton button = HomeCircledButton_.build(this);
button.title.setText(sc.get(i).getLabel());
LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 0.33f));
homeButtonsLL.addView(button);

Layout.xml

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:gravity="center"
                android:weightSum="1.0"
                android:id="@+id/home_buttons_ll">
           </LinearLayout>
  </HorizontalScrollView>

我还尝试创建XML中已有的按钮并以编程方式隐藏它们(View.GONE),但它们只是调整大小

1 个答案:

答案 0 :(得分:3)

如果您动态设置大小并且子视图的数量未知,那么weight方法并不可行。而是获取屏幕的宽度,并根据该设置按钮的宽度。也, LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 0.33f));您的代码中的这一行将无法按预期工作。您需要将params设置为按钮才能使其正常工作。

您可以尝试这样的事情,

HomeCircledButton button = HomeCircledButton_.build(this);
button.title.setText(sc.get(i).getLabel());
//divide the screen width by 3
int buttonWidth = getScreenWidth() / 3;
LinearLayout.LayoutParams buttonparams= new LinearLayout.LayoutParams(buttonWidth, LinearLayout.LayoutParams.MATCH_PARENT);
button.setLayoutParams(buttonparams);
homeButtonsLL.addView(button);

...

private int getScreenWidth( ) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        int width;
        getWindowManager().getDefaultDisplay()
        .getMetrics(displayMetrics);
        width = displayMetrics.widthPixels;
        return width;
    }

并且您不必在xml中设置权重总和,

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:gravity="center"
                android:id="@+id/home_buttons_ll">
           </LinearLayout>
  </HorizontalScrollView>