Siddhpura Amit
Siddhpura Amit

Reputation: 15078

make horizontal listview's listitem's height dynamic

I have list of button in bottom of the page which is in horizontal listview, i want to show only 4 row in listview, when screen become bigger it's item size should also become bigger so only 4 item shows.

for example

enter image description here

here you can see that after increasing size of width it's related horizontal listview's listitem also increasing

is it possible? if possible than can any body suggest me how we can handle it ?

Upvotes: 1

Views: 841

Answers (2)

Komal Sorathiya
Komal Sorathiya

Reputation: 228

Create one custom layout class like below..

public class MyLinearLayout extends LinearLayout {

public MyLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyLinearLayout(Context context) {
    super(context);
}

public void setLayoutParams(int width) {
    LayoutParams params = new LayoutParams(width / 4,
            LayoutParams.WRAP_CONTENT);
    this.setLayoutParams(params);
}

@Override
public void setLayoutParams(android.view.ViewGroup.LayoutParams params) {
    super.setLayoutParams(params);
}

}

put this horizontal scrollview in your xml file

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

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

        <com.example.widget.MyLinearLayout
            android:id="@+id/llMainHome"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/orange_bg"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/home" />
        </com.example.widget.MyLinearLayout>

        <com.example.widget.MyLinearLayout
            android:id="@+id/llHomeSearch"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/green_bg"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/search" />
        </com.example.widget.MyLinearLayout>

        <com.example.widget.MyLinearLayout
            android:id="@+id/llHomeFavorite"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/green_bg"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/favorite" />
        </com.example.widget.MyLinearLayout>

        <com.example.widget.MyLinearLayout
            android:id="@+id/llHomeGrocery"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/green_bg"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/make_juice" />
        </com.example.widget.MyLinearLayout>

        <com.example.widget.MyLinearLayout
            android:id="@+id/llHomeSettings"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/green_bg"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/settings" />
        </com.example.widget.MyLinearLayout>
    </LinearLayout>
</HorizontalScrollView>

And in your activity class file declare

private MyLinearLayout llHomeSearch, llHomeFavorite,
        llHomeGrocery, llHomeSettings,llMainHome;

oncreate Method code is

llHomeFavorite = (MyLinearLayout) findViewById(R.id.llHomeFavorite);
    llHomeFavorite.setOnClickListener(this);

    llMainHome = (MyLinearLayout) findViewById(R.id.llMainHome);
    llMainHome.setOnClickListener(this);

    llHomeSearch = (MyLinearLayout) findViewById(R.id.llHomeSearch);
    llHomeSearch.setOnClickListener(this);

    llHomeGrocery = (MyLinearLayout) findViewById(R.id.llHomeGrocery);
    llHomeGrocery.setOnClickListener(this);

    llHomeSettings = (MyLinearLayout) findViewById(R.id.llHomeSettings);
    llHomeSettings.setOnClickListener(this);
    Display display = getWindowManager().getDefaultDisplay();
    Point size = getDisplaySize(display);
    int width = size.x;
    llMainHome.setLayoutParams(width);
    llHomeFavorite.setLayoutParams(width);
    llHomeGrocery.setLayoutParams(width);
    llHomeSearch.setLayoutParams(width);
    llHomeSettings.setLayoutParams(width);

and getDisplaysize method is

@SuppressLint("NewApi")
private static Point getDisplaySize(final Display display) {
    final Point point = new Point();
    try {
        display.getSize(point);
    } catch (java.lang.NoSuchMethodError ignore) { // Older device
        point.x = display.getWidth();
        point.y = display.getHeight();
    }
    return point;
}

here you go..it will work nice..

there is no need to take horizontal list view if you have fix number of item in your tab bar..

Upvotes: 1

Gooziec
Gooziec

Reputation: 2776

Maybe try to get Screen width and then set List's element to 1/4 of that width?

Something like in onResume/onCreate

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
width = size.x; //remember that width

And in getView

LayoutParams params=new LayoutParams(width/4, -1);
element.setLayoutParams(params)

Upvotes: 1

Related Questions