我总是创建没有标题的自定义对话框,使用android:windowNoTitle
或styles.xml
中的requestWindowFeature(Window.FEATURE_NO_TITLE)
使其居中(垂直和水平),但我的某些对话框不是中心水平的,例如这个对话框:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="20dp"
android:gravity="center"
android:background="@drawable/dialog_bg" >
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/loading_s"/>
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:gravity="center_vertical"
android:text="@string/loading"
android:textColor="@color/dialog_text"
android:textSize="@dimen/dialog_title_text_size" />
</LinearLayout>
这是创建对话框的方法:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
View v = LayoutInflater.from(getActivity()).inflate(R.layout.dlg_progress, null);
Dialog dlg = new Dialog(getActivity(), R.style.My_Dialog_Style); //My_Dialog_Style contains android:windowNoTitle = true
dlg.setContentView(v);
dlg.setCanceledOnTouchOutside(false);
dlg.setCancelable(true);
return dlg;
}
以下是它在屏幕上的显示方式
如果我删除了android:windowNoTitle
属性,则此对话框显示正确,因此仅在使用没有标题的对话框时才会出现问题。
有谁知道为什么会发生这种情况以及如何让对话始终以屏幕为中心?
答案 0 :(得分:2)
当您使用Builder
并使用setView
设置自定义视图时,无需删除Dialog的标题,并且对话框应居中。
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dlg_progress, null));
return builder.create();
}
这与文档中的完成方式非常类似:Creating a Custom Layout
答案 1 :(得分:1)
你试过看过这个帖子吗?
How to align custom dialog centre in android ?
android:layout_gravity="center"
看起来它只是一个布局更改,或尝试使用relativeLayout或LinearLayout而不是FrameLayout
答案 2 :(得分:1)
我相信你正在低于对话框的最小宽度属性。它可以作为
找到<item type="dimen" name="dialog_min_width_major">65%</item>
在Android的框架中。它取决于您正在查看的values
文件夹,因此根据密度,方向等而有所不同。
您可以在自己的风格中覆盖此值。如果将它设置为明确小于对话框(10%)的东西,它可能正常工作。如果没有,请继续阅读。
如果您在视图树面板中发现,它会显示嵌套在3个FrameLayouts内的LinearLayout。我的猜测是,最深的FrameLayout的宽度设置为wrap_content
,因此它不会填充父布局,只会与LinearLayout一样大。但是,我不能确定,因为你的照片中的尺寸被砍掉了。
删除标题后为什么会改变?我不知道。您可以通过调整onMeasure
中的填充/布局参数来破解它,但似乎应该有更简洁的方法来执行此操作。
答案 3 :(得分:0)
仍然不知道为什么删除标题会使Dialog
不能水平居中,但当我设置min_width
= LinearLayout
对话minWidth
时,这个问题就消失了。