Как центрировать макет внутри Android Dialog? - PullRequest
12 голосов
/ 09 сентября 2011

Я пытаюсь создать пользовательское диалоговое окно, центрируя его содержимое, но оно всегда выровнено по левому краю.Вот 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 ]

11 голосов
/ 09 сентября 2011

попробуйте изменить это: a:layout_gravity="center_horizontal|center_vertical" OR используйте Relative_Layout и выровняйте линейный макет по центру родительского элемента с fill_parent для относительного wrap_content для линейного.

, хотя он работает со мной в центре

2 голосов
/ 29 июня 2012

Измените 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);
}
0 голосов
/ 09 сентября 2011

Можете ли вы попробовать изменить свой LinearLayout layout_gravity на гравитацию? См. Разницу, объясненную здесь: Гравитация и layout_gravity на Android

0 голосов
/ 09 сентября 2011

Вы делаете layout_gravity, и это хорошо, но, поскольку вы делаете это с максимальным макетом, он не может позиционироваться относительно того, что вокруг него.

Я думаю, что завершение вышеуказанного макета внутри другого макета сделает это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...