2016-03-03 23 views
0

即時使用Xamarin和MvvmCross。LayoutParams更改僅在全屏中生效

我做了一個帶有recyclerView的FragmentDialog,該列表通過xml文件上的綁定來填充,所以我沒有適配器,我應該保持這種方式。

如果我沒有錯,那裏沒有內置的方式來使recyclerView只需要它的內容所需的大小,這應該不成問題,但在這種情況下,我需要列表從底部開始...

所以我這樣做(它是一個自定義的全屏對話):

 MvxRecyclerView list = Dialog.FindViewById<MvxRecyclerView>(Resource.Id.recyclerview); 
     list.LayoutChange += List_LayoutChange; 
在layoutChange

private void List_LayoutChange(object sender, View.LayoutChangeEventArgs e) 
    { 
     MvxRecyclerView list = Dialog.FindViewById<MvxRecyclerView>(Resource.Id.recyclerview); 

     int itemHeight = list.GetChildAt(0).Height; 

     if (itemHeight != 0) 
     { 
      ViewGroup.LayoutParams prms = list.LayoutParameters; 

      prms.Height = itemHeight * list.GetAdapter().ItemCount; 

      list.LayoutParameters = prms; 
      list.LayoutChange -= List_LayoutChange; 
      list.RequestLayout(); 
     } 
    } 

這是工作的罰款

然後,名單得到完全的高度和需要該列表看起來像從底部開始。

現在,客戶端告訴我他不喜歡全屏對話框,並希望狀態欄,我認爲這應該很容易,只是在對話框創建權刪除這條線?

dialog.Window.AddFlags(WindowManagerFlags.Fullscreen); 

但看起來像它不是那麼容易,當對話框它不是全屏所的LayoutParams變化似乎沒有任何影響,它只是不無能爲力。

我的方法被調用,我得到正確的項目高度,它只是不改變recyclerview高度。

注意,在創建設置全屏和recyclerview PARAMS改變後清零標誌工程

所以看起來它只有在全屏模式下工作。

有人可以對此有所瞭解嗎?

在此先感謝。

回答

2

正如你所說,RecyclerView並不知道它的大小。 自從上次更新到支持庫以來,它是!

http://android-developers.blogspot.fr/2016/02/android-support-library-232.html

的RecyclerView插件提供用於創建列表和網格以及支持動畫一種先進的和柔性基底。此版本爲LayoutManager API帶來了令人興奮的新功能:自動測量!這允許RecyclerView根據其內容的大小自行調整大小。這意味着以前不可用的場景,例如對RecyclerView的維度使用WRAP_CONTENT,現在是可能的。您會發現所有內置LayoutManagers現在都支持自動測量。

我會建議等待Xamarin包裹LIB(已經有一個測試版https://www.nuget.org/packages/Xamarin.Android.Support.v4/23.2.0-beta1

+0

伊夫結束這樣做沒有recyclerView,它很高興知道這個接下來的時間,但我的問題是關於我的解決方法不工作沒有全屏... – Nanoc