2014-10-17 60 views
1

我想編寫一個dialogFragment,它包含一個ListView和ListView下面的一個按鈕。 按鈕必須始終可見,這意味着您可以滾動ListView,但該按鈕始終可見。DialogFragment中的listView下面的按鈕

對話框還必須調整其高度。這意味着,如果ListView控件只包含饑荒預警系統元素(1或2元)的DialogFragment不應該填滿屏幕的整個高度...

這是我的代碼:

<?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="wrap_content"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:padding="@dimen/fragment_default_padding" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/Back_arrow" 
      android:id="@+id/imgBack" /> 
     <TextView 
      android:text="@string/this_pizzeria_require_a_phone_number_inorderto_accept_orders" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      style="@style/default_title" /> 
     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edtPhoneNumber" 
      android:layout_marginBottom="4dp" 
      android:singleLine="true" 
      android:imeOptions="actionDone" 
      android:hint="@string/choose_from_the_below_list_or_insert_a_new_one_here" 
      android:inputType="phone" /> 
     <ListView 
      android:id="@+id/lvPhones" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@+id/btnAdd" 
      android:dividerHeight="1dp" /> 
     <Button 
      android:id="@+id/btnDone" 
      android:text="@string/done" 
      style="@style/default_button" /> 
    </LinearLayout> 
</RelativeLayout> 

此代碼工作正常,但如果listView包含很多項目,下面的按鈕將消失。 這是對話的屏幕: enter image description here

正如你可以看到按鈕被拉伸,並添加另一個項目到ListView,它就會消失。

有沒有辦法達到我的目標?

非常感謝!

+0

添加機器人:下=「@ ID/lvPhones」的按鈕 – aProperFox 2014-10-17 17:33:29

+0

的按鈕是一個的LinearLayout裏面,我不能用'below'屬性 – user3471528 2014-10-17 17:37:36

+0

不好意思啊,我沒有看在嵌套的LinearLayout ,我只看到頂層佈局:P – aProperFox 2014-10-17 17:41:45

回答

0

我個人不太關心你的佈局。我認爲你應該在你的linearLayout中將它分開一點。然而,無論何時遇到此問題,我都會添加

android:layout_weight="1" 

並且通常會解決此問題。

<Button 
     android:id="@+id/btnDone" 
     android:text="@string/done" 
     android:layout_weight="1" 
     style="@style/default_button" /> 
+0

你需要添加達到每個視圖,雖然沒有? – aProperFox 2014-10-17 17:43:38

+0

不,將它添加到只有一個視圖將確保它被顯示。然而,增加查看更多佈局並設置權重而不是在單個佈局下具有多個視圖將是有益的。 – RyPope 2014-10-17 17:45:40

+0

謝謝,但不幸的是,按鈕仍然消失,什麼是我的目的最好的佈局層次? – user3471528 2014-10-17 17:49:08

0

我通常爲此使用RelativeLayout。你對你的元素排列方式有更多的控制。

無論出於何種原因(我從來不研究它,使用RelativeLayout的工作沒有浪費時間)列表視圖總是會延伸至底部的LinearLayout(按目的我認爲)

你的情況,你可以只從移動的按鈕線性的容器視圖我認爲(這是一個相對佈局)和對準底部 - 即最頂層的RelativeLayout是無用無論如何在代碼:-)

0

使用AlertDialog.BuildersetView()指向佈局與按鈕取出並作爲setPositiveButton()你的「完成」按鈕。這種方式總是在底部,對話框會自動調整高度。

public class YourDialogFragment extends DialogFragment implements ... { 
    ... 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog dialog = new AlertDialog.Builder(getActivity()) 
      .setTitle("login") 
      .setView(createDialogView()) 
      .setPositiveButton(R.string.done, this) 
      .create(); 
     dialog.setCancelable(true); 
     return dialog; 
    } 

    private View createDialogView() { 
     final LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View contentView = inflater.inflate(R.layout.content, null); 

     ... 
     ListView listView = (ListView) contentView.findViewById(R.id.lvPhones); 
     listView.setAdapter(adapter); 
    } 
+0

謝謝,以這種方式我不能自定義按鈕:( – user3471528 2014-10-18 11:23:14

+0

也許嘗試http://stackoverflow.com/questions/21569301/change-android-dialog-button-text-size-via-styles或setBackground()等onShow() – biegleux 2014-10-18 11:38:36