LinearLayout 不显示所有 ListView,只显示一个孩子

问题描述 投票:0回答:1

我有一些数据将显示在

ListView
中。问题是一切都很顺利,但 ListView 或 LinearLayout 的扩展程度不足以显示
CustomListView
的所有子级;它只显示一个孩子。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/LinearLayoutDetails">

    <ListView
        android:id="@+id/ov_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

这是包含

ListView
LinearLayout
的布局文件。此布局包含在另一个带有
LinearLayout
layout_height="match_parent"
中。还有款式:

<style name="LinearLayoutDetails">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginLeft">15dp</item>
        <item name="android:layout_marginRight">15dp</item>
        <item name="android:gravity">right</item>
        <item name="android:orientation">vertical</item>
</style>
<style name="SubtitleTextView">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:maxLines">1</item>
        <item name="android:ellipsize">end</item>
        <item name="android:layout_alignParentRight">true</item>
        <item name="android:textColor">@color/textSecondary</item>
    </style>

    <style name="ValueTextView">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:maxLines">1</item>
        <item name="android:ellipsize">end</item>
        <item name="android:textColor">@color/textSecondary</item>
        <item name="android:layout_alignParentLeft">true</item>
    </style>
<style name="ViewLine">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">0.75dp</item>
        <item name="android:focusable">false</item>
        <item name="android:focusableInTouchMode">false</item>
        <item name="android:background">#BDBDBD</item>
    </style>

列表项查看xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:orientation="horizontal"
        android:gravity="center_vertical">

        <TextView
            android:id="@+id/name"
            style="@style/SubtitleTextView"
            android:layout_weight="0.5"
            android:gravity="left" />

        <TextView
            android:id="@+id/value"
            style="@style/ValueTextView"
            android:layout_weight="0.5"
            android:gravity="right" />
    </LinearLayout>

    <View style="@style/ViewLine" />
</LinearLayout>

和适配器:

package ir.noideaw.aufbau.Adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.lang.reflect.Array;
import java.util.ArrayList;

import ir.noideaw.aufbau.Model.Unit;
import ir.noideaw.aufbau.R;

/**
 * Created by muhammad on 5/8/18.
 */

public class UnitAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<Unit> data;
    private LayoutInflater inflater;

    public UnitAdapter(Context context, ArrayList<Unit> data) {
        this.context = context;
        this.data = data;
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }
    public static class ViewHolder{
        TextView name, value;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return i;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;
        ViewHolder viewHolder = new ViewHolder();
        if (v == null){
            v = inflater.inflate(R.layout.unit_detail, null);
            viewHolder.name = v.findViewById(R.id.name);
            viewHolder.value = v.findViewById(R.id.value);
            v.setTag(viewHolder);
        } else
            viewHolder = (ViewHolder) view.getTag();
        if (data.size() > 0){
            Unit values = data.get(i);
            viewHolder.name.setText(values.getName());
            viewHolder.value.setText(values.getValue());
        }
        return v;
    }
}

当我手动设置 ListView 或 LinearLayout 的高度时,Listview 会显示更多子项以适合该高度。 我还访问了许多网页(例如linearlayout不显示所有子项)来解决该问题,但没有人回应。

android android-layout listview android-linearlayout
1个回答
0
投票

请手动将“名称”和“值”TextView 宽度添加为“0sp”,如原始 TextView 中的

android:layout_width="0sp"
,而不是样式。

可能您在 SubtitleTextView 样式中将“name”文本视图宽度声明为“match_parent”,如果是,则将其设置为“0sp”。或 ValueTextView 宽度为“match_parent”,

请注意,如果您正在使用权重功能,并且其父级方向固定为水平方向,则其子级视图宽度必须为“0sp”,并为所有子级赋予适当的权重。通过应用这个,你的体重特征效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.