2013-11-20 70 views
1

我已經爲我的AlertDialog設置了一個EditText和ListView的自定義視圖。 EditText充當列表的過濾器。現在,當用戶過濾它時,整個對話框將根據列表內容進行大小調整。如何根據屏幕大小將列表設置爲固定高度,以便不調整大小?例如,列表總是佔用屏幕高度的40%。我嘗試過重量,但沒有幫助。這是我現在擁有的。AlertDialog中的ListView,阻止它改變對話框的高度

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="@dimen/activity_vertical_margin" > 

    <EditText 
     android:id="@+id/EditSearch" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/hint_search" /> 

    <ListView 
     android:id="@+id/list1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

回答

0

確定這裏來調整對話框的大小,

所以首先你虛增您的XML到一個視圖,並將其添加到您的對話框。

然後您創建一個Rect並使Rect的大小等於屏幕的大小。

然後更改創建的View並使用類似於Rect的大小的60%的公式來調整大小,該公式實際上是屏幕的大小。

這裏是一個代碼你需要修改它根據你的代碼,因爲你沒有提供任何代碼

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View view = inflater.inflate(R.layout.ads_dialog1, null); 
      Your-Dialog.setContentView(view); //add the XML to your Dialog 

// this if is an demonstration of 'if your device is a tablet` do the following...  
if ((getResources().getConfiguration().screenLayout &  Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL 
       && density.densityDpi < DisplayMetrics.DENSITY_XHIGH) 
     { 
      Rect displayRectangle = new Rect(); // Create a Rect 
      Window window = this.getWindow(); 
      window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); // add the size of the screen to the Rect 
      view.setMinimumWidth((int)(displayRectangle.width() * 0.60f)); // give the dialog a width of 60% of the screen size 
      view.setMinimumHeight((int)(displayRectangle.height() * 0.50f)); // give the dialog a height of 50% 
     } 

希望你有這個想法,這是你在找什麼

+0

謝謝,它有點作用,但它不會限制最大高度,所以如果最初有很多列表項,對話框仍然可以調整大小。我沒有看到任何setMaximumHeight函數,所以有什麼想法? – ashishduh

+0

不幸的是,沒有'setMaxHeight',但你是否試圖改變'0.50f'的值 – Coderji

1

該對話框將其內容縮小到非常低的水平。在創建對話框之後,我嘗試將所有頂層視圖的高度設置爲MATCH_PARENT,但仍然沒有改變任何內容。所以讓我們嘗試一種不同的方法。常見的一種是在窗口使用ViewTreeObserver進行佈局時進行監聽(對話框有自己的窗口)。因此,假設您的ListView有足夠的項目來將對話框初始增大到最大允許的大小,我們會將其佈局高度更改爲常量。然後,當它的適配器內容改變時,它不會縮小。

在你的DialogFragment的onStart方法是這個技巧應該發生的地方。

 val list = dlog.dialog.findViewById(R.id.results) 
     list.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { 
      override fun onGlobalLayout() { 
       if (list.height > 0) { 
        list.layoutParams.height = list.height 
        list.viewTreeObserver.removeOnGlobalLayoutListener(this) 
       } 
      } 
     })