如何在Android Dialog内部布局?

时间:2011-09-09 18:03:09

标签: android android-layout dialog customdialog

我正在尝试创建一个自定义对话框,并将其内容置于中心位置,但它始终以左对齐方式结束。这是aboutdialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:a="http://schemas.android.com/apk/res/android"
  a:orientation="vertical"
  a:id="@+id/AboutDialogLayout" 
  a:layout_width="fill_parent" 
  a:layout_height="fill_parent" 
  a:layout_gravity="center_horizontal" 
  a:gravity="center_horizontal">

    <ImageView a:id="@+id/imageView1" 
               a:src="@drawable/pricebook" 
               a:layout_height="wrap_content" 
               a:layout_width="wrap_content"/>
    <TextView a:layout_height="wrap_content"         
              a:textAppearance="?android:attr/textAppearanceLarge" 
              a:id="@+id/textView1" 
              a:text="Price Book" 
              a:layout_width="wrap_content"/>
    <TextView a:layout_height="wrap_content" 
              a:id="@+id/textView2" 
              a:layout_width="wrap_content" 
              a:text="foo"/>
</LinearLayout>

我的(相关)代码:

Dialog d = new Dialog(this);
d.setContentView(R.layout.aboutdialog);
d.setTitle(R.string.app_name);

我在这里缺少什么?谢谢你的帮助。

图像: Screen shot of Dialog problem

4 个答案:

答案 0 :(得分:11)

尝试编辑此内容:a:layout_gravity="center_horizontal|center_vertical"

使用Relative_Layout并将线性布局与父级中心对齐,fill_parent为线性相对wrap_content

虽然它与我合作在中心

答案 1 :(得分:2)

修改Dialog的ViewGroup(FrameLayout),它保存您的内容布局。我使用静态方法并在DialogFragments中的onActivityCreated()内调用它:

/**
 * Center dialog content inside available space
 * @param dialog
 */
public static void centerDialogContent(Dialog dialog) {
ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView();
View content = decorView.getChildAt(0);
FrameLayout.LayoutParams contentParams = (FrameLayout.LayoutParams)content.getLayoutParams();
contentParams.gravity = Gravity.CENTER;
content.setLayoutParams(contentParams);
}

答案 2 :(得分:0)

你正在做layout_gravity这是好事,但是由于你做到最外面的布局,它不能相对于它周围的内容定位自己。

我认为将上面的布局包装在另一个布局中就可以了

答案 3 :(得分:0)

您可以尝试将LinearLayout layout_gravity更改为重力吗?请参阅此处说明的差异:Gravity and layout_gravity on Android