当关闭 DialogFragment 时布局拉伸问题

8

我有一个Activity,其布局如下:

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/top_menu_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="16dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

        // ICONS

    </RelativeLayout>

    <FrameLayout
        android:id="@+id/temperatura_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="184dp"
        android:layout_centerHorizontal="true">

        <com.github.pavlospt.CircleView xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/reading_value"
            android:layout_width="192dp"
            android:layout_height="192dp"
            android:layout_gravity="center"
            />
    </FrameLayout>

    <ImageView
        android:id="@+id/add_item_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottomBar"
        android:layout_centerHorizontal="true"
        android:padding="12dp"
        android:layout_marginTop="36dp"
        android:background="?attr/selectableItemBackgroundBorderless"
        android:clickable="true"
        android:focusable="true"
        android:scaleType="center"
        app:srcCompat="@drawable/ic_add_item_black_24px"
        android:contentDescription="@string/add_item_btn_description" />

    <com.roughike.bottombar.BottomBar
        android:id="@+id/bottomBar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        app:bb_behavior="iconsOnly"
        app:bb_tabXmlResource="@xml/bottom_navbar" />

</RelativeLayout>

add_item_btn有一个点击事件,该事件创建一个全屏DialogFragment来插入项目信息并将其添加到本地数据库中。以下代码显示我如何创建DialogFragment

FragmentManager fragmentManager = getSupportFragmentManager();
InsertItemDialogFragment fragment = new InsertItemDialogFragment();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.add(android.R.id.content, fragment).addToBackStack(null).commit();

问题是,当我使用dismiss()关闭创建的片段时,活动布局会拉伸,在屏幕按钮栏的底部栏被覆盖一半(请参见图像)。

enter image description here enter image description here

我尝试更改FragmentTransaction(从android.R.id.content更改为R.id.main_content,其中main_content是根 RelativeLayout 的ID),但没有成功。我还尝试使用两种不同的Material Design底部导航栏实现,但两者都有相同的行为。

找到解决方案了吗? - DKV
还没有。正如在他的答案中所评论的那样,@azizbekian提出的解决方案并没有解决我的问题。 - Minoru
2个回答

1
首先,您正在将Activity更改为全屏并调用添加片段。在关闭对话框后,您需要使Activity以与设置为全屏相同的方式恢复其布局,但这次是普通屏幕。您看到的空间是Android系统栏使用的空间。
其次,请勿使用相对布局。使用线性布局来布局您的Activity,学习使用权重,并在需要时使用“match_parent”。
第三,请问为什么在Dialog片段中使用协调布局?您不需要这样做。
第四,Android有自己的底部栏https://developer.android.com/reference/android/support/design/widget/BottomNavigationView.html。使用它。他们甚至有一个工作示例和模板,您可以从Android Studio中查看。
根据您提供的信息,很难知道您的应用程序出了什么问题。

感谢所有的建议!让我来解释一下:(i)我没注意到这一点,但是将CoordinatorLayout排他地改为LinearLayout解决了我的问题;(ii)我不明白为什么不使用RelativeLayout,因为我在很多地方都看到说它没有真正的损失;(iii)我之所以使用它是因为我从例子中学到了;(iv)我打算将使用的每个库都切换到Support Library的小部件上,只是时间不够。 - Minoru
你应该在Activity中使用协调布局而不是DialogFragment中。或者,如果你希望可以两个都使用。我不明白为什么要显示一个全屏的对话框片段,当你可以有另一个新的活动来输入数据。 - Pedro Varela
由于输入数据完全与“Activity”的信息相关,而不是自给自足的,因此我认为将其构建为“DialogFragment”而不是新的“Activity”会更有意义。 - Minoru
阅读此链接https://developer.android.com/training/design-navigation/index.html。例如,在将来,您可能需要为平板电脑实现布局,而使用当前的方法不起作用或看起来很丑陋。请使用仅片段/活动来实现相同的功能。 - Pedro Varela

1

找到答案了!虽然我对CoordinatorLayout几乎没有经验,但将FragmentDialog的根布局切换为LinearLayout解决了问题。


如果有人能够恰当地解释清楚,我会接受这个答案。 - Minoru
我遇到了同样的问题,但不是在我的自定义对话框中。我在系统对话框中遇到了问题,即用于请求运行时权限的那个对话框。当我在对话框中点击给定的按钮时,它可以完美地工作,但是当我使用返回按钮关闭对话框时,它会像你在截图中展示的那样拉伸我的布局。而我们无法对系统对话框进行任何操作。 - AndiM
你尝试在你的CoordinatorLayout中添加android:fitsSystemWindows="true"了吗? - AndiM
当我在使用CoordinatorLayout时,将其保留在FragmentDialog当前的LinearLayout中。 - Minoru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接