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>