android - 使水平 ListView 的列表项的高度动态

标签 android android-layout listview android-listview

我在水平 ListView 的页面底部有按钮列表,我想在 ListView 中只显示 4 行,当屏幕变大时,它的项目大小也应该变大,所以只显示 4 个项目。

例如

enter image description here

在这里你可以看到,在增加宽度后,相关的水平 ListView 的列表项也增加了

这可能吗?如果可能的话,任何人都可以建议我如何处理它吗?

最佳答案

像下面这样创建一个自定义布局类..

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

将这个水平 ScrollView 放在你的 xml 文件中

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

并在你的 Activity 类文件中声明

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

oncreate方法代码为

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

getDisplaysize 方法是

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

给你..它会很好用..

如果您的标签栏中有固定数量的项目,则无需采用水平 ListView ..

关于android - 使水平 ListView 的列表项的高度动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568503/

相关文章:

c# - ListView 图标显示模糊 (C#)

android - 如何从付费应用迁移到应用内购买?

javascript - 我想使用同一个按钮来播放和暂停。第一次单击我想播放它,第二次单击我想暂停它

android - ListView 的自定义单元格与 API9 中的父级宽度不匹配

java - Android 的 gridview 中的水平滚动和不同尺寸的图像,如 Windows8 App Tiles

android - 滚动 ListView 变化

android - Volley 错误 : Repeating a request when verbose logging is enabled fails

android - Release模式下的 Flutter 构建 apk 无法生成更新版本

java - 以编程方式在 fragment 中包含 View 中的布局

android - ListView 的自定义适配器