【问题标题】:LinearLayout doesn't show all ListView but one childLinearLayout 不显示所有 ListView 但只有一个孩子
【发布时间】:2018-05-13 17:23:38
【问题描述】:

首先,我为我的业余问题道歉。我有一些数据将显示在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>

这是包含ListViewLinearLayout 的布局文件。此布局包含在另一个LinearLayoutlayout_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 会显示更多子项以适应该高度。 我也访问了许多网页(如this)来解决这个问题,但没有人回应。告诉我是否需要更多数据。谢谢??????

【问题讨论】:

标签: android android-layout listview android-linearlayout


【解决方案1】:

请手动将“名称”和“值”TextViews 宽度添加到“0sp”,作为原始 TextView 中的android:layout_width="0sp",而不是样式。

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

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

【讨论】:

  • 刚刚添加但没有任何变化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2011-12-19
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多