Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么android自定义对话框会全屏显示_Java_Android_Android Layout_Android Xml_Android Dialog - Fatal编程技术网

Java 为什么android自定义对话框会全屏显示

Java 为什么android自定义对话框会全屏显示,java,android,android-layout,android-xml,android-dialog,Java,Android,Android Layout,Android Xml,Android Dialog,我正在尝试创建自定义对话框 基本布局(我也尝试过各种修改过的布局) 我得到了下面的对话框,它是全屏的,我不想要它 已经尝试过的解决方案,其结果与上面的屏幕截图相同 | | | 我的基础布局没有一个在高度上使用MATCH\u PARENT。正如上面所说的,堆栈溢出 还可以尝试根据答案将对话框的窗口设置更改为WRAP_CONTENT 还尝试将整个RelativeLayout保存在父线性布局中,请参见下面的第3条注释 我唯一可以获得体面对话框的时间是在为xml布局指定高度时,就像这样android

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

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

我得到了下面的对话框,它是全屏的,我不想要它

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

  • |
  • |
  • |
  • 我的基础布局没有一个在高度上使用
    MATCH\u PARENT
    。正如上面所说的,堆栈溢出
  • 还可以尝试根据答案将对话框的窗口设置更改为
    WRAP_CONTENT
  • 还尝试将整个
    RelativeLayout
    保存在父
    线性布局中
    ,请参见下面的第3条注释

  • 我唯一可以获得体面对话框的时间是在为xml布局指定高度时,就像这样
    android:layout\u height=“150dp”

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

  • 消息较大时,内容/布局将丢失
  • 当消息较小时,显示的对话框比要求的大,请参见下面的“确定”按钮
  • 不要建议将上述(指定固定高度)作为解决方案,因为它效率不高,外观也不太好,也不是动态的,它是静态的

    问题

    如何指定外观美观、可自定义的自定义对话框

    如果你能帮我解决这个问题,我愿意提供赏金以示感谢

            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
    
    编辑:为正确的解决方案提供奖励。

    
    
    <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\u alignParentBottom=“true”,然后进行检查。

    从线性布局中删除android:layout\u alignParentBottom=“true”行可以在对话框中设置此代码

    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);
    

    是的,它发生在相对的年轻人身上。 在它的谷歌明确提到

    请注意,大小之间不能存在循环依赖关系 亲属关系及其子女的地位。比如你 不能具有高度设置为WRAP_内容的RelativeLayout和 将子集合与父集合与底部对齐

    在使用dialog时,必须根据需要使用linearlayout。 这对你来说绝对有效

    进一步的想法可能不适用于你,但我只是提出来供参考

    您可以使用java代码生成“确定大小”对话框, 或者,您可以从布局参数设置布局边距,以便在不同的屏幕大小下保持响应。 你也可以做一件事, 获取屏幕的大小

    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);
    

    询问我是否需要进一步的规范。

    当我面临同样的问题时,这是我的方法

    I扩展的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

    尝试对话框片段。。。如果无法获得解决方案,请使用scrollview为textview@Prachi我试过了,但没有成功。如果您愿意,可以共享代码。如果您确实想仔细查看它。@Rustam现在将尝试这样做,但用户将不知道有一个滚动条,除非配置滚动条visibility@Prachi...Thanks很多。效果很好!。为什么会这样,知道吗?@AkhilJain不知道。。。。只是想知道我什么时候遇到了类似的问题。。如果你遇到真正的原因,请告诉我:)@Prachi我喜欢你的答案。只有一行+1谢谢你的回答,仔细想想。如何可能指定内容的确切高度和宽度,这将取决于屏幕大小和尺寸。另请参见已尝试的解决方案中的答案5。我已经用
    WRAP\u CONTENT
    实现了您的解决方案,但一无所获。ConstraintLayout也会出现同样的行为。即使ConstraintLayout是ListViewItemLayout O.O的根元素
    @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>