Как разместить макет внутри диалогового окна Android?
Я пытаюсь создать настраиваемый диалог и сосредоточиться на нем, но он всегда заканчивается выравниванием по левому краю. Вот 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]()
Ответы
Ответ 1
попытайтесь отредактировать это: a:layout_gravity="center_horizontal|center_vertical"
ИЛИ
используйте Relative_Layout и выровняйте линейный макет с центром родителя с fill_parent
для Relative wrap_content
для Linear.
хотя он работает со мной в центре
Ответ 2
Изменить диалог ViewGroup (FrameLayout), который содержит макет содержимого. Я использую статический метод и вызываю его внутри onActivityCreated() в DialogFragments:
/**
* 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);
}
Ответ 3
Вы выполняете layout_gravity, что хорошо, но поскольку вы делаете это с помощью внешнего макета, он не может позиционировать себя относительно того, что вокруг него.
Я думаю, что обертывание вышеуказанного макета внутри другого макета сделало бы это
Ответ 4
Можете ли вы попытаться изменить LinearLayout layout_gravity на простоту гравитации? См. Разницу, объясненную здесь: Гравитация и макет_Гравитации на Android