5

我有一个关于对话框RelativeLayout。它在普通活动中正常工作,但当我决定将其移至 时DialogFragment,大多数对齐规则停止工作。这是布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="250dp" >

    <TextView
        android:id="@+id/label_copyright"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginTop="20dp"
        android:text="Copyright (c) 2013 Copyright"
        android:textSize="8dp" />

    <TextView
        android:id="@+id/label_version"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_above="@+id/label_copyright"
        android:layout_marginTop="2dp"
        android:text="@null" />

    <TextView
        android:id="@+id/label_app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/label_version"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="2dp"
        android:text="Application Name"
        android:textSize="25dp" />


    <ImageView
        android:id="@+id/image_app_logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/label_app_name"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"
        android:src="@drawable/field_public_required" />


    <TextView
        android:id="@+id/label_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/label_copyright"
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:autoLink="web"
        android:text="application description with more details" />


</RelativeLayout>

以下是它应该如何工作,并且在活动中它确实可以工作(Eclipse 图形布局屏幕截图):

在此处输入图像描述

下面是它在运行带有片段的应用程序时的样子:

在此处输入图像描述

显然,只有第一个视图按预期居中,而所有其他视图都被推到顶部。无论minHeight我在布局中指定哪个,行为总是相同的。

实例化对话框的代码非常简单:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.about, null);

    try
    {
      TextView t = (TextView)view.findViewById(R.id.label_version);
      t.setText(getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName);
    }
    catch(NameNotFoundException e)
    {
    }

    return new AlertDialog.Builder(getActivity())
    .setView(view)
    .setTitle(R.string.about)
    .setPositiveButton(R.string.ok,
    new DialogInterface.OnClickListener()
    {
      public void onClick(DialogInterface dialog, int whichButton)
      {
      }
    }
    )
    .create();
}

它有什么问题以及如何解决?

4

2 回答 2

2

我们有同样的错误。我们最终做了一些非常 hacky 的事情来让它工作:

<LinearLayout android:layout_width="fill_parent"
              android:layout_height="fill_parent">
  <RelativeLayout android:layout_width="fill_parent"
                  android:layout_height="fill_parent">
    <EditText android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerVertical="true"
              android:layout_centerHorizontal="true"
              android:id="@+id/layout_form_field">
    <Button android:layout_below="@id/layout_form_field"/>
  </RelativeLayout>
</LinearLayout>

基本上,只需将RelativeLayout 嵌套在LinearLayout 中... #silly

于 2014-05-14T20:17:18.647 回答
1

将您的 XML 布局更改为:

 <?xml version="1.0" encoding="utf-8" ?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
     android:gravity="center">
     <ImageView
          android:id="@+id/imageViewApplicationImage"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"/>
     <TextView
          android:id="@+id/textViewApplicationName"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"/>
     <TextView
          android:id="@+id/textViewApplicationDescription"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"/>
     <TextView
          android:id="@+id/textViewApplicationCopyright"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"/>

</LinearLayout>

这里重要的部分是设置gravity属性,以便您的所有小部件都将在视图中居中。该gravity属性设置线性布局的子视图的位置。

于 2013-12-02T13:57:05.883 回答