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

Android ListView-在整个ListView高度上拉伸单个项目,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,如果我在列表视图上的阵列适配器中有一个单个项,我想将该项扩展到整个列表视图高度(因此我将该项的文本放在屏幕中央) 像这样: 使用RecyclerView(上图)很容易做到这一点,但就我而言,我现在负担不起在RecyclerView上重建ListView屏幕的费用。我尝试将布局项的高度设置为屏幕高度“match_parent”或在代码中,覆盖80dp值。这对我的处境没有任何影响,结果如下: 以下是我创建ArrayAdapter的方式: string[] noResultsItem = { Re

如果我在列表视图上的阵列适配器中有一个单个项,我想将该项扩展到整个列表视图高度(因此我将该项的文本放在屏幕中央)

像这样:

使用RecyclerView(上图)很容易做到这一点,但就我而言,我现在负担不起在RecyclerView上重建ListView屏幕的费用。我尝试将布局项的高度设置为屏幕高度“match_parent”或在代码中,覆盖80dp值。这对我的处境没有任何影响,结果如下:

以下是我创建ArrayAdapter的方式:

string[] noResultsItem = { Resources.GetString(Resource.String.no_network) };
playlistListView.Adapter = new ArrayAdapter<string>(this, Resource.Layout.no_result_row, Resource.Id.textTop, noResultsItem);
string[]noResultsItem={Resources.GetString(Resource.string.no_network)};
playlistview.Adapter=new ArrayAdapter(此,Resource.Layout.no_result_行,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的解决方案,但我不太喜欢这个解决方案。

使用相对布局高度作为

 android:layout_height="80dp" 
在上替换它

android:layout\u height=“match\u parent”

重心应该是中心,或者你可以采用线性布局。使用listview项来显示没有数据是不好的做法。在FrameLayout中使用listview,而不是表示listview中没有数据的Textview或任何ImageView,并播放视图的可见性,如

if(data.size > 0){
 listview.setVisibilty(View.VISIBLE);
 textview.setVisibility(View.GONE);
}else{
 listview.setVisibilty(View.GONE);
 textview.setVisibility(View.VISIBLE);
}

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

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;
}
公共类SingleItemAdapter:BaseAdapter { 私有只读上下文; 私有只读ListView ListView; 私有只读int-textViewResourceId; 私有只读int资源; 私有只读int textResourceId; 公共SingleItemAdapter(IntPtr javaReference,JniHandleOwnership transfer):base(javaReference,transfer){} 公共SingleItemAdapter(上下文上下文、ListView ListView、int-resource、int-textViewResourceId、int-textResourceId) { this.context=上下文; this.textViewResourceId=textViewResourceId; 这个资源=资源; this.textResourceId=textResourceId; this.listView=listView; SetSelector(Android.Resource.Color.Transparent); listView.CacheColorHint=Android.Graphics.Color.Transparent; } 公共覆盖视图GetView(int位置、视图转换视图、视图组父视图) { if(convertView==null) { var充气机=从(上下文)开始的充气机; var视图=充气机。充气(资源,父项,false); 返回自定义视图(视图); } 其他的 { 返回自定义视图(convertView); } } 私有视图自定义视图(视图视图) { view.LayoutParameters.Height=listView.Height; var textTop=view.FindViewById(textViewResourceId); textTop.Text=context.GetString(textResourceId); 返回视图; } 公共覆盖对象GetItem(int位置) { 返回context.GetString(textResourceId); } 公共覆盖长GetItemId(int位置) { 返回textResourceId; } 公共覆盖整数计数=>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>


检查这个@AbidKhan cheers,不知怎么的,我以前没有看到,我现在就试试看。你能发布你的活动代码吗?这不起作用-它产生的结果与我上面描述的完全相同。你想拉伸文本以填充@Jakuboholovsky行吗