2017-04-03 34 views
0

單項如果我有一個的ListViewArrayAdapter一個項目,我想舒展一個項目遍佈的ListView高度(所以我有一個項目在屏幕中心的文字)。的ListView - 伸展在整個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代替它的溶液,但我不喜歡第在很多解決方案。

+1

檢查這個http://stackoverflow.com/questions/13070361/single-row-to-fill-parent-listview-height –

+1

@AbidKhan歡呼聲,不知何故之前沒有看到,我現在就試試看 –

+0

你可以發表你的活動代碼嗎? – FAT

回答

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> 
0

使用相對佈局的高度,

android:layout_height="80dp" 

取代它

android:layout_height="match_parent" 和重心應該是中心,或者你可以採取的LinearLayout

+0

這不起作用 - 它產生與我上面描述的完全相同的結果。 –

+0

你想伸展文本來填充行@JakubHolovsky –

0

是使用了列表視圖中該項目的壞習慣顯示沒有數據。而不是使用的TextView或任何Imageiew表示可能是您的列表視圖中的FrameLayout沒有數據和意見知名度喜歡玩

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