2011-05-24 88 views
0

所以我正在使用Builder創建自定義AlertDialog。我有我的對話框與以下佈局膨脹的自定義視圖:Android自定義AlertDialog高度不尊重佈局參數

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

    <EditText android:id="@+id/edit_username" 
     style="@style/EditPassword" 
     android:hint="@string/login_username_hint" /> 

    <EditText android:id="@+id/edit_password" 
     style="@style/EditPassword" 
     android:hint="@string/login_password_hint" /> 

</LinearLayout> 

了Android:layout_height風格的的EditText控件設置爲「WRAP_CONTENT」。當我用這個自定義視圖顯示對話框時,對話框被拉伸以填充整個屏幕的高度。無論我將LinearLayout上的layout_height設置爲(包括硬編碼像素值),它仍然會填充仿真器上的整個屏幕。

我希望有一些簡單的東西,我錯過了嗎?編輯:我查看了層次結構查看器,並且我在這個問題中包含的佈局被正確定義,但是它被包裝在一個FrameLayout中的一個FrameLayout內,並且最外面的FrameLayout被設置爲「wrap_content」,但是在查看器下面有一堆空的空間。

編輯2:根據要求,膨脹佈局的代碼。

protected Dialog onCreateDialog(int id) { 
    switch(id) { 
    case AUTHENTICATION_DIALOG: 
     LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
     final View loginView = inflater.inflate(R.layout.login_dialog, null); 
     return new AlertDialog.Builder(HomeActivity.this) 
      .setTitle("Upload profile data") 
      .setView(loginView) 
      .setPositiveButton("Upload", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        EditText userName = (EditText)loginView.findViewById(R.id.edit_username); 
        EditText password = (EditText)loginView.findViewById(R.id.edit_password); 
        String userNameStr = StringUtils.convertToTrimmedString(userName.getText()); 
        String passwordStr = StringUtils.convertToTrimmedString(password.getText()); 

        if (userNameStr.equals("") || passwordStr.equals("")) { 
         new AlertDialog.Builder(HomeActivity.this) 
          .setTitle("Required fields missing") 
          .setMessage("You must enter a username and password") 
          .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, int which) { 
            HomeActivity.this.showDialog(AUTHENTICATION_DIALOG); 
            dialog.dismiss(); 
           } 
          }).show(); 
        } else { 
         dialog.dismiss(); 
        } // end if user entered username and password 
       } // end "Upload" onClick 
      }) // end setPositiveButton DialogInterface.OnClickListener() 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } // end "Cancel" onClick 
      }).create(); 
    default: 
     return null; 
    } 
} 
+0

不知道,不夠詳細對不起。你爲什麼不創建一個新的對話框(這個);然後設置內容視圖? – Blundell 2011-05-24 22:06:37

+0

我很高興允許AlertDialog類來處理繁重的工作,並且只需要擔心從DialogInterface.OnClickListener() – MattC 2011-05-24 22:14:30

+0

的兩個EditText字段中獲取文本是否可以發佈已添加AlertDialog的代碼? – ataulm 2011-05-25 15:20:25

回答

0

所以我切換到使用RelativeLayout的,像這樣:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" > 

    <EditText android:id="@+id/edit_username" 
     style="@style/EditPassword" 
     android:hint="@string/login_username_hint" /> 

    <EditText android:id="@+id/edit_password" 
     style="@style/EditPassword" 
     android:layout_below="@+id/edit_username" 
     android:hint="@string/login_password_hint" /> 

</RelativeLayout> 

,它工作正常。我切換回線性進行測試,當我切換回LinearLayout時,它顯示了舊的斷開行爲。我打算將這個答案留在未標記的位置,希望有人能夠告訴我爲什麼它會在LinearLayout和Relative之間出現問題。