我有一些数据将显示在
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不显示所有子项)来解决该问题,但没有人回应。
请手动将“名称”和“值”TextView 宽度添加为“0sp”,如原始 TextView 中的
android:layout_width="0sp"
,而不是样式。
可能您在 SubtitleTextView 样式中将“name”文本视图宽度声明为“match_parent”,如果是,则将其设置为“0sp”。或 ValueTextView 宽度为“match_parent”,
请注意,如果您正在使用权重功能,并且其父级方向固定为水平方向,则其子级视图宽度必须为“0sp”,并为所有子级赋予适当的权重。通过应用这个,你的体重特征效果很好。