2011-09-09 79 views
11

我正在尝试创建一个自定义对话框,并将其内容居中,但始终以左对齐结束。这里是aboutdialog.xml:如何将Android对话框中的布局居中?

<?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

+0

这是奇怪的。这对我来说可以。你可以张贴截图吗? – inazaruk

+3

+1使用:而不是android:无处不在,你是怎么做到的? –

+0

是的,我也检查它的工作正常。 –

回答

9

尝试编辑本:a:layout_gravity="center_horizontal|center_vertical"
OR
使用Relative_Layout和调整线性布局于母公司的中心,fill_parent的相对wrap_content为线性。

尽管它与我中心工作

+3

在RelativeLayout中包装整个XML。两个布局的'layout_width's需要'fill_parent',并且'layout_height's需要被设置为'wrap_content'(至少这是我想要的)。 – Conrad

+0

相对布局做了诀窍,谢谢。 –

+0

但问题是在RelativeLayout中的子ViewGroup必须具有layout_width = fill_parent才能使其工作,并且有时您不希望该行为适合您的内容。看到我下面的解决方案;) –

0

你做layout_gravity这是很好的,但因为你这样做是为了在最外面的布局,它不能摆正自己的位置相对于它周围有什么。

我认为包装在另一个布局上面的布局会做

+0

在另一个LinearLayout中包装上述XML没有什么区别。 – Conrad

0

你可以尝试改变你的LinearLayout layout_gravity只是重力?看到这里的区别解释说:Gravity and layout_gravity on Android

+0

没有区别。 – Conrad

+0

如何在LinearLayout中的每个视图上设置layout_gravity =“center”? –

+0

已经尝试过 - 仍然没有骰子。 – Conrad

2

修改对话的一个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); 
}