10

我創建了一個自定義對話框,代碼如下。問題是,對話框的高度變成了wrap_content,即它獨立於我在xml中提到的任何高度。我查了其他問題,他們沒有幫助我。在對話框片段中更改自定義對話框的高度

public class PointsDialogFragment extends DialogFragment{ 

    private static final String TAG = PointsDialogFragment.class.getSimpleName(); 

    public static PointsDialogFragment newInstance(){ 
     PointsDialogFragment pdf = new PointsDialogFragment(); 
     Bundle newBundle = new Bundle(); 
     pdf.setArguments(newBundle); 
     return pdf; 
    } 

    private View mRoot; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     getDialog().requestWindowFeature(STYLE_NO_TITLE); 
     mRoot = inflater.inflate(R.layout.fragment_points_dialog, null); 
     return mRoot; 
    } 
} 

和fragment_points_dialog.xml的XML是

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="313dp" 
    android:layout_width="fill_parent" 
    android:background="@color/green_gradient_start" 
> 
    <RelativeLayout 
     android:layout_width="173dp" 
     android:layout_height="242dp" 
     android:background="@drawable/reward_box" 
     android:id="@+id/reward_box" 
     android:layout_alignParentLeft="true" 
    > 
     <TextView 
      android:layout_centerInParent="true" 
      style="@style/WallSectionHeading" 
      android:text="5" 
     /> 
    </RelativeLayout> 
    <RelativeLayout 
     android:layout_width="173dp" 
     android:layout_height="250dp" 
     android:background="@drawable/reward_mascot" 
     android:layout_alignParentRight="true" 
    > 
     <LinearLayout 
      android:id="@+id/reward_cloud" 
      android:layout_width="wrap_content" 
      android:layout_height="100dp" 
      android:background="@drawable/reward_cloud" 
      android:layout_alignParentBottom="true" 
     > 
      <TextView 
       android:layout_gravity="center_vertical" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="You have gained 5 Delight Points" 
       android:textColor="@color/white" 
       android:textStyle="italic" 
       android:paddingLeft="15dp" 
       android:paddingRight="10dp" 
      /> 
     </LinearLayout> 

    </RelativeLayout> 

</RelativeLayout> 

我顯示這樣的對話框..

PointsDialogFragment pdf = PointsDialogFragment.newInstance(); 
pdf.show(getFragmentManager(), "dialog"); 

我想知道一種方法,我可以改變的高度對話框在對話框片段中。

回答

17

我認爲問題是,當你膨脹的視圖,你不供應ViewParent。如果不提供該參數,則視圖根目錄中的任何「layout_X」參數將被忽略,因爲這些值將提供給父級(在當前情況下爲null)。你可以做的是在膨脹時提供一個ViewParent,或者在另一個ViewGroup中包裝你的View XML,將絕對佈局參數保留在第二級。

示例代碼: mRoot = inflater.inflate(R.layout.fragment_points_dialog, container, false);

+0

mRoot = inflater.inflate(R.layout.fragment_points_dialog,container);這個答案是否正確? – Ads

2

,而不是使用的LinearLayout使用的RelativeLayout並設置layout_height爲wrap_content將自動調整視圖在你DialogFragment XML。

確保不要使用align parent bottom,否則會填滿屏幕。

+0

這個爲我工作。還要確保沒有任何子視圖使用match_parent作爲高度,所以它不會填滿屏幕。 – mariozawa