为什么Android自定义对话框全屏显示

时间:2015-08-28 06:44:46

标签: java android android-layout android-xml android-dialog

我正在尝试创建自定义对话框

基本布局(我也尝试了各种修改过的布局)

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:background="@color/dialogHeaderBackground"
            android:gravity="center"
            android:minHeight="@dimen/minHeightDialogTitle"
            android:text=""
            android:textStyle="bold" />

        <TextView
            android:id="@+id/message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/title"
            android:layout_marginTop="5dp"
            android:text="" />

        <LinearLayout
            android:id="@+id/loutButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/message"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="5dp"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnNeutral"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="" />

            <Button
                android:id="@+id/btnNegative"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="" />

            <Button
                android:id="@+id/btnPositive"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="" />
        </LinearLayout>
    </RelativeLayout>

Java代码

        Dialog dialog = new Dialog(this);
//      Dialog dialog = new Dialog(this,R.style.Theme_Dialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        dialog.setContentView(R.layout.custom_dialog);

        Button btnPositive=(Button) dialog.findViewById(R.id.btnPositive);
        Button btnNegative=(Button) dialog.findViewById(R.id.btnNegative);
        Button btnNeutral=(Button) dialog.findViewById(R.id.btnNeutral);

        TextView txvTitle=(TextView)dialog.findViewById(R.id.title);
        TextView txvMessage=(TextView)dialog.findViewById(R.id.message);
        ...
        so on and so forth

我得到了以下对话框,这是全屏,我不想要

fullscreen dialog

已尝试的解决方案,其结果与上面的截图相同

  1. Styles.xml configuration 1 | Implemented Pastebin code
  2. Styles.xml configuration 2 | Implemented Pastebin code
  3. The example provided in Android Dev Guide using AlertDialog.Builder | Implemented Java Code
  4. 我的底层布局都没有使用MATCH_PARENT高度。如此Stack溢出answer
  5. 中所述
  6. 还尝试根据回答here |将窗口设置更改为WRAP_CONTENT以进行对话Implemented Java Code in Pastebin
  7. 还尝试将整个RelativeLayout保留在父LinearLayout内,请参阅answer
  8. 中的第3条评论

    我唯一可以获得体面对话的时候是指定xml布局的高度,例如android:layout_height="150dp"

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

    指定固定高度时的对话框,

    1. 当邮件更大时,内容/布局会丢失 more text in dialog message
    2. 当消息较小时,对话框显示大于所需的对话框,请参阅下面的确定按钮 less text is dialog message
    3. 不建议将上述(指定固定高度)作为解决方案,因为它效率不高,看起来不那么好,也不是动态的,它的静态

      问题

      该怎么做指定,看起来不错的自定义对话框也可以自定义?

      如果您可以帮助我解决此问题,我愿意给予赏金作为表示感谢

      编辑:提供了解决问题的赏金。

5 个答案:

答案 0 :(得分:6)

从线性布局中删除android:layout_alignParentBottom="true"

答案 1 :(得分:3)

<LinearLayout
            android:id="@+id/loutButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/message"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="5dp"
            android:orientation="horizontal" >

从上面的代码中删除android:layout_alignParentBottom="true"并检查。

答案 2 :(得分:1)

雅,它发生在relativelayout。 在其谷歌docs中明确提到。

  

请注意,您不能在大小之间具有循环依赖关系   RelativeLayout及其子女的位置。例如,你   不能将RelativeLayout的高度设置为WRAP_CONTENT和a   子项设置为ALIGN_PARENT_BOTTOM

当您使用对话框时,您必须根据您的要求使用linearlayout。 它会挑衅地为你工作。

进一步的想法可能不适合您,但我只是提及它以供参考

你可以使用java代码进行make fix size对话框, 或者您可以从布局参数设置布局边距,以便您可以保持不同屏幕大小的响应能力。 你也可以做一件事, 获得屏幕大小

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels; 

比您可以计算新的对话框大小并将其设置为@ guobao的答案

DisplayMetrics displayMetrics = new DisplayMetrics();
dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (new width);
params.height = (new height);

问我是否需要进一步的说明。

答案 3 :(得分:0)

您可以在对话框中设置此代码

DisplayMetrics displayMetrics = new DisplayMetrics();
dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (the width you want to set);
params.height = (the height you want to set);

答案 4 :(得分:0)

当我遇到同样的问题时,这是我的方法。

我扩展了DialogFragment(来自support.v4 lib)

然后膨胀:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();
    final View view = inflater.inflate(R.layout.dialog_whatever, null);

    builder.setView(view);
    return builder.create();
}

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/rounded_corners"
    android:padding="20dp">

    <TextView
        android:id="@+id/confirm_dialog_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textColor="@color/black"
        android:text="@string/are_you_sure_declining_whatever"/>

    <LinearLayout
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|bottom"
        android:orientation="horizontal">

        <Button
            android:id="@+id/cancel_action"
            android:layout_marginRight="10dp"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:text="@string/cancel"
            android:textColor="@color/accent_color"/>

        <Button
            android:id="@+id/confirm_action"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:textColor="@color/accent_color"
            android:text="@string/reject"/>

    </LinearLayout>
</LinearLayout>

这种方法也遵循材料设计准则!!

希望这对你有所帮助

致以最诚挚的问候,

pedrovic90