2

3 buttons scrollview

Hello everyone I am trying to display 3 to X buttons on android. The idea is to always start with 3 buttons that takes each 33% of the size of the screen (width) And to be able to scroll Horizontaly through items.

Also theses items will be added programmatically to the view.

I tried to put a LinearLaout horizontal within an HorizontalScrollView. And then addchild to the linearlayout. but the items resize and it doesn't scroll.

Is it the right approach ? or does anyone have an idea how to make it ?

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>

I also tried to create the buttons already in the XML and hide them programatically (View.GONE) but they just resize

Damien Locque
  • 1,810
  • 2
  • 20
  • 42
  • Seems to be proper approach. But if there are too many buttons it's better you go for `HorizontalListView` because of it's view reuse capability. As for the current approach, can you post some code where you are applying 33% logic and adding LinearLayout to scrollview? – Abhishek V Feb 26 '15 at 18:28
  • just edited the code – Damien Locque Feb 27 '15 at 08:51

1 Answers1

3

If you are setting the size dynamically and there are unknown number of child views, then weight approach isn't that feasible. Instead get the width of the screen, and based on that set the width of the button. Also, LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 0.33f)); this line in your code will not work as you expected. You need to set the params to button to make it work.

You can try something like this,

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;
    }

and you don't have to set weight sum in 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>
Abhishek V
  • 12,488
  • 6
  • 51
  • 63