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