【问题标题】:RelativeLayout in DialogFragment - MarginBottom is ignoredDialogFragment 中的 RelativeLayout - MarginBottom 被忽略
【发布时间】:2017-09-05 03:39:56
【问题描述】:

所以基本上,我有这个 DialogFragment 是全屏的,并且在进度条上有一个按钮(如果您单击该按钮,它会消失并且进度条是可见的)。我最初将 xml 放在一个活动中,并且那里的一切都按预期工作,但现在我想将它重构为全屏对话框片段。

问题是,进度条顶部的按钮现在与 parentLayout 的底部对齐

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_gps_loading"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_setsensor"
    tools:ignore="MissingPrefix"
    >

  <ImageView
      android:layout_width="90dp"
      android:layout_height="38dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="45dp"
      />

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"
      android:layout_marginLeft="40dp"
      android:layout_marginRight="40dp"
      android:orientation="vertical"
      >

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/ic_location"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="17dp"
        android:gravity="center_horizontal"
        android:text="@string/promptGpsPermissionBody"
        style="@style/fullscreenText"
        />
  </LinearLayout>

  <ProgressBar
      android:id="@+id/progressBar2"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignBottom="@+id/btnActivateGps"
      android:layout_alignTop="@+id/btnActivateGps"
      style="?android:attr/progressBarStyle"
      />

  <Button
      android:id="@+id/btnActivateGps"
      android:layout_width="match_parent"
      android:layout_height="50dp"
      android:layout_alignParentBottom="true"
      android:layout_centerHorizontal="true"
      android:layout_marginBottom="71dp"
      android:layout_marginLeft="63dp"
      android:layout_marginRight="63dp"
      android:background="@color/white"
      android:enabled="true"
      android:visibility="visible"
      />
</RelativeLayout>

特别奇怪的是,进度条与按钮对齐,但它仍然位于与之前相同的位置

这里是java代码

public class GpsSensorDialog extends DialogFragment {

  @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    View view = inflater.inflate(R.layout.activity_gps_sensor, null);

    builder.setView(view);

    Dialog dialog = builder.create();

    if (dialog.getWindow() != null) {
      dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
      dialog.getWindow()
          .setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
    return dialog;
  }

  @Override public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, R.style.CustomDialog);
  }

  public static GpsSensorDialog newInstance() {
    Bundle args = new Bundle();
    GpsSensorDialog fragment = new GpsSensorDialog();
    fragment.setArguments(args);
    return fragment;
  }

  @Override public void onStart() {
    super.onStart();
    getDialog().getWindow()
        .setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
  }
}

以及我在 onCreate 中设置的样式

<style name="CustomDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>

【问题讨论】:

  • 从 Button 中移除:`android:layout_alignParentBottom="true"`..
  • 那行不通。我必须将它与父母的底部对齐,然后将 bottomMargin 设置为 70 dips
  • 面临同样的问题?我知道它的老问题。有没有机会记住实际的修复方法?
  • @AneesDeen 遗憾的是没有,但也许使用 ConstraintLayout 而不是 RelativeLayout 可以修复它。可悲的是,我不再有代码了,因为我不再在那家公司工作:/

标签: android margin android-relativelayout


【解决方案1】:

试试这个布局。此外,相应地更改您的可绘制对象、样式和字符串。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_gps_loading"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/ic_launcher"
    tools:ignore="MissingPrefix">

    <ImageView
        android:layout_width="90dp"
        android:layout_height="38dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="45dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:orientation="vertical">

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="17dp"
            android:gravity="center_horizontal"
            android:text="obsdas" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnActivateGps" />

    <Button
        android:id="@+id/btnActivateGps"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_centerHorizontal="true"  
        android:layout_marginBottom="71dp"
        android:layout_marginLeft="63dp"
        android:layout_marginRight="63dp"
        android:background="@android:color/white"
        android:enabled="true"
        android:visibility="visible" />
</RelativeLayout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多