ListView - 在整个ListView高度上拉伸单个项目

时间:2017-04-03 09:31:09

标签: android listview android-arrayadapter

如果我在 ListView ArrayAdapter 中有项,我想将这一项全部拉伸 ListView 高度(所以我在屏幕中央有一个项目的文字)。

像这样:

enter image description here

这很容易用RecyclerView(上图)完成,但在我的情况下,我现在无法负担在RecyclerView上重建ListView屏幕。我尝试将布局项的高度设置为屏幕高度“match_parent”或代码,覆盖80dp值。它对我的情况没有任何影响,结果看起来像这样:

enter image description here

这就是我创建ArrayAdapter的方式:

string[] noResultsItem = { Resources.GetString(Resource.String.no_network) };
playlistListView.Adapter = new ArrayAdapter<string>(this, Resource.Layout.no_result_row, Resource.Id.textTop, noResultsItem);

这是ArrayAdapter项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:id="@+id/noResultsRow">
    <TextView
        android:id="@+id/textTop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="18dip"
        android:textColor="#ffffff"
        android:text=""
        android:gravity="center_horizontal" />
</RelativeLayout>

我可以想象一个隐藏并显示ListView的解决方案,并将其替换为可居中的TextView,但我不太喜欢那个解决方案。

3 个答案:

答案 0 :(得分:0)

使用相对布局高度

 android:layout_height="80dp" 

替换

android:layout_height="match_parent" 并且重力应该是中心,或者你可以采用LinearLayout

答案 1 :(得分:0)

使用listview项目显示没有数据是不好的做法。使用而不是Textview或任何表示在ChartLayout中没有列表视图数据的Imageiew,并且可以看到像

这样的视图
if(data.size > 0){
 listview.setVisibilty(View.VISIBLE);
 textview.setVisibility(View.GONE);
}else{
 listview.setVisibilty(View.GONE);
 textview.setVisibility(View.VISIBLE);
}

答案 2 :(得分:0)

通过为一个项目创建我自己的简单适配器来解决:

public class SingleItemAdapter : BaseAdapter
{
    private readonly Context context;
    private readonly ListView listView;
    private readonly int textViewResourceId;
    private readonly int resource;
    private readonly int textResourceId;

    public SingleItemAdapter(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { }

    public SingleItemAdapter(Context context, ListView listView, int resource, int textViewResourceId, int textResourceId)
    {
        this.context = context;
        this.textViewResourceId = textViewResourceId;
        this.resource = resource;
        this.textResourceId = textResourceId;
        this.listView = listView;

        listView.SetSelector(Android.Resource.Color.Transparent);
        listView.CacheColorHint = Android.Graphics.Color.Transparent;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            var inflater = LayoutInflater.From(context);
            var view = inflater.Inflate(resource, parent, false);
            return CustomizeView(view);
        }
        else
        {
            return CustomizeView(convertView);
        }
    }

    private View CustomizeView(View view)
    {
        view.LayoutParameters.Height = listView.Height;
        var textTop = view.FindViewById<TextView>(textViewResourceId);
        textTop.Text = context.GetString(textResourceId);
        return view;
    }

    public override Object GetItem(int position)
    {
        return context.GetString(textResourceId);
    }

    public override long GetItemId(int position)
    {
        return textResourceId;
    }

    public override int Count => 1;
}

这是适配器中包含的项目的更新布局:

<?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="80dp"
    android:gravity="center_horizontal|center_vertical"
    android:id="@+id/noResultsRow"
    android:orientation="vertical">
    <TextView
        android:id="@+id/textTop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="18dip"
        android:textColor="#ffffff"
        android:text=""
        android:gravity="center" />
</LinearLayout>