android - 如何在 RecyclerView 或 ListView 项目 View 中使用 layout_weight 让等高的项目填满屏幕上的可用空间?

标签 android android-layout listview

我目前需要使用 RecyclerView(或 ListView),但项目数固定为 4。我希望这 4 个项目能够平等地使用屏幕上的可用空间。 RecyclerView 是屏幕上除应用栏外的唯一 View 。 IE。 RecyclerView 将 layout_height 设置为 match_parent。我选择 RecyclerView 是因为项目根据模型状态具有不同的布局。

我还没有查看它,但我确信我可以在 Java 代码中以编程方式为每个项目设置高度。但是,如果我可以在 XML 中指定它,那似乎不优雅。在我写这篇文章的时候,我右边的类似问题请回答那个问题。

我在item_layout.xml文件中尝试了如下方式,layout_weight在其他场景中的使用方式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:layout_height="0dp">...</LinearLayout>

然后屏幕上什么也没有显示。

我想知道的是,我可以在布局 XML 中使用 layout_weight 或其他方式执行此操作吗?如果有,怎么做?

最佳答案

作为 API reference说,layout_weightLinearLayout 的一个属性,所以它不能与其他 ViewGroup 一起使用,例如 RecyclerViewListView。相反,您必须以编程方式设置项目的高度。

由于您似乎担心代码的清洁度,我认为这是一个相当优雅的解决方案,以防您使用 RecyclerView:

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater
            .from(parent.getContext())
            .inflate(R.layout.item_list, null);

    int height = parent.getMeasuredHeight() / 4;
    int width = parent.getMeasuredWidth();

    view.setLayoutParams(new RecyclerView.LayoutParams(width, height));

    return new ViewHolder(view);
}

关于android - 如何在 RecyclerView 或 ListView 项目 View 中使用 layout_weight 让等高的项目填满屏幕上的可用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31776698/

相关文章:

java - Android 上的 USB HID

android - 从自定义 textView 中删除线性布局

android - 按钮不是从 XML 中获取的?空指针

android - 两个ListView上面的TextView

java - 如何实现正确的 https 客户端身份验证

java - 安卓工作室 : Could not get unknown property 'kotlin_version'

java - 如何处理ListView中的滚动? ListView 自动加载

android - 如何确定要放置在 TextView 中的文本是否适合单行

android - 如何更改 ListView 中每个项目的背景颜色?

Android:由于无法解析符号,gradle 构建停止