片段中的布局不居中

Posted

技术标签:

【中文标题】片段中的布局不居中【英文标题】:Layout in fragment not centering 【发布时间】:2019-12-17 15:37:20 【问题描述】:

我正在构建我的第一个适用于 android 的应用程序。我希望使用 Navigation Drawer Activity 在屏幕和选项之间切换。到目前为止,一切都很好。一切都很好。但是我在内容中加载的布局没有正确对齐。看图片

我尝试在所有组合中将 layout_width 和 layout_height 更改为 fill_parent、match_parent 和 wrap_content。还尝试添加重心和垂直重力,但到目前为止我失败了。

内容布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/app_bar_main_menu"
        tools:context=".MainMenu">


        <RelativeLayout
                android:id="@+id/relativeLayout"
                android:layout_
                android:layout_ />


</androidx.constraintlayout.widget.ConstraintLayout>

我试图放入内容布局的内容:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_
                                                   android:layout_ tools:layout_editor_absoluteY="81dp">

    <ImageView
            android:layout_
            android:layout_ app:srcCompat="@drawable/fragment_client_add_address"
            android:id="@+id/imageView10"
            app:layout_constraintEnd_toStartOf="@+id/editText10"
            android:layout_marginEnd="12dp" android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="@+id/editText10"/>
    <EditText
            android:layout_
            android:layout_
            android:inputType="textPersonName"
            android:hint="Kontakt broj"
            android:ems="10"
            android:id="@+id/editText9"
            app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="24dp" app:layout_constraintTop_toBottomOf="@+id/editText11"/>
    <EditText
            android:layout_
            android:layout_
            android:inputType="textPersonName"
            android:hint="Adresa"
            android:ems="10"
            android:id="@+id/editText10"
            app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="24dp" app:layout_constraintTop_toBottomOf="@+id/editText9"/>
    <EditText
            android:layout_
            android:layout_
            android:inputType="textPersonName"
            android:hint="Naziv klijenta"
            android:ems="10"
            android:id="@+id/editText11" android:layout_marginEnd="8dp"
            app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="64dp" app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintHorizontal_bias="0.518"/>
    <EditText
            android:layout_
            android:layout_
            android:inputType="textPersonName"
            android:hint="E-Mail"
            android:ems="10"
            android:id="@+id/editText12"
            app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginTop="24dp" app:layout_constraintTop_toBottomOf="@+id/editText10"/>
    <ImageView
            android:layout_
            android:layout_ app:srcCompat="@drawable/round_person_black_48"
            android:id="@+id/imageView11"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="@+id/editText11" app:layout_constraintEnd_toStartOf="@+id/editText11"
            android:layout_marginEnd="12dp"/>
    <ImageView
            android:layout_
            android:layout_ app:srcCompat="@drawable/round_call_black_48"
            android:id="@+id/imageView12"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="@+id/editText9" app:layout_constraintEnd_toStartOf="@+id/editText9"
            android:layout_marginEnd="12dp"/>
    <ImageView
            android:layout_
            android:layout_ app:srcCompat="@drawable/fragment_client_add_email"
            android:id="@+id/imageView13"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="@+id/editText12" app:layout_constraintEnd_toStartOf="@+id/editText12"
            android:layout_marginEnd="12dp"/>
    <Spinner
            android:layout_
            android:layout_
            android:id="@+id/spinner"
            android:layout_marginTop="24dp"
            app:layout_constraintTop_toBottomOf="@+id/editText12" app:layout_constraintStart_toStartOf="@+id/editText12"
            app:layout_constraintEnd_toEndOf="@+id/editText12" android:entries="@array/clientType"
    />
    <Spinner
            android:layout_
            android:layout_
            android:id="@+id/spinner2" app:layout_constraintStart_toStartOf="@+id/spinner"
            app:layout_constraintEnd_toEndOf="@+id/spinner" android:entries="@array/clientContract"
            app:layout_constraintTop_toBottomOf="@+id/spinner" android:layout_marginTop="32dp"/>
    <Button
            android:text="@string/button_genericConfirm"
            android:layout_
            android:layout_
            android:id="@+id/button" android:layout_marginBottom="32dp"
            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="128dp" app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="128dp" android:layout_marginTop="8dp"
            app:layout_constraintTop_toBottomOf="@+id/spinner2" app:layout_constraintVertical_bias="1.0"/>
</androidx.constraintlayout.widget.ConstraintLayout>

这是我期望的样子:

但实际上是这样的:

【问题讨论】:

使用线性布局代替约束布局 @JimaleAbdi 你是什么意思?抱歉,我还是 android 编程新手 给我时间来解决你的问题 内容布局指的是什么?它是活动的布局还是导航抽屉或什么?这个内容是什么?是片段吗? 不要使用线性布局 【参考方案1】:

RelativeLayoutcontent layout 中的问题

您需要将RelativeLayout 中的width 更改为content layout 中的android:layout_width="match_parent"

试试这个

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_
        android:layout_
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/app_bar_main_menu"
        tools:context=".MainMenu">


        <RelativeLayout
                android:id="@+id/relativeLayout"
                android:layout_
                android:layout_ />


</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

我没有更新这篇文章中的代码,但我已经尝试过了,但对我没有帮助。【参考方案2】:

问题不在于您的片段布局实现,我只是在一个活动中尝试过,它工作正常。

我会说将内容布局更改为FrameLayout,它通常用于保存片段,更多信息可以在这里找到:Why is a FrameLayout used for fragments?

框架布局而不是相对布局应该是

<FrameLayout
            android:id="@+id/relativeLayout"
            android:layout_
            android:layout_ />

只是将 id 保留为 relativeLayout,但可以随意更改它。

另外,如果你有这样的问题,你可以随时使用布局检查器,它在工具菜单中,试试看。或者您可以只使用背景颜色来检查布局大小,就像回到过去一样,在布局检查器之前。

【讨论】:

我真的不敢相信它是如此简单......非常感谢您的解决方案!【参考方案3】:

在所有编辑文本中使用 drawablestart 代替 imageview 总是好的 请在下面找到xml可能会有所帮助

       <?xml version="1.0" encoding="utf-8"?>
       <androidx.constraintlayout.widget.ConstraintLayout 
          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:layout_
          android:layout_>

      <EditText
         android:id="@+id/editText11"
         android:layout_
         android:layout_
         android:layout_marginTop="64dp"
         android:layout_marginEnd="8dp"
         android:drawableStart="@mipmap/ic_launcher"
         android:ems="10"
         android:hint="Naziv klijenta"
         android:inputType="textPersonName"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.518"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />

      <EditText
         android:id="@+id/editText9"
         android:layout_
         android:layout_
         android:layout_marginTop="24dp"
         android:drawableStart="@mipmap/ic_launcher"

         android:ems="10"
         android:hint="Kontakt broj"
         android:inputType="textPersonName"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/editText11" />
    <EditText
    android:id="@+id/editText10"
    android:layout_
    android:layout_
    android:layout_marginTop="24dp"
    android:drawableStart="@mipmap/ic_launcher"
    android:ems="10"
    android:hint="Adresa"
    android:inputType="textPersonName"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editText9" />


<EditText
    android:id="@+id/editText12"
    android:layout_
    android:layout_
    android:layout_marginTop="24dp"
    android:drawableStart="@mipmap/ic_launcher"
    android:ems="10"
    android:hint="E-Mail"
    android:inputType="textPersonName"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editText10" />


<Spinner
    android:id="@+id/spinner"
    android:layout_
    android:layout_
    android:layout_marginTop="24dp"
    android:entries="@mipmap/ic_launcher"
    app:layout_constraintEnd_toEndOf="@+id/editText12"
    app:layout_constraintStart_toStartOf="@+id/editText12"
    app:layout_constraintTop_toBottomOf="@+id/editText12" />

 <Spinner
    android:id="@+id/spinner2"
    android:layout_
    android:layout_
    android:layout_marginTop="32dp"
    android:entries="@mipmap/ic_launcher"
    app:layout_constraintEnd_toEndOf="@+id/spinner"
    app:layout_constraintStart_toStartOf="@+id/spinner"
    app:layout_constraintTop_toBottomOf="@+id/spinner" />

   <Button
      android:id="@+id/button"
      android:layout_
      android:layout_
      android:layout_marginStart="128dp"
      android:layout_marginTop="8dp"
      android:layout_marginEnd="128dp"
      android:layout_marginBottom="32dp"
      android:text="xxxx"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/spinner2"
      app:layout_constraintVertical_bias="1.0" />
   </androidx.constraintlayout.widget.ConstraintLayout>

如果您希望在左侧使用以下代码的图像视图的特定尺寸

    <?xml version="1.0" encoding="utf-8"?>
      <layer-list xmlns:android="http://schemas.android.com/apk/res/android" 
       >
      <item
      android:drawable="@drawable/icon"
      android:
      android:
      />

     </layer-list >

【讨论】:

但我的问题是我想在 relativelayout 中显示的内容没有像“预期结果”图片中那样居中于左上和右下。在那里你可以看到我添加了约束,以便所有 editText 字段都居中,但实际上它们被推到左边,我的按钮完全坏了:/ 我在 xml 中运行您的代码并为我检查了 edittext 是否位于中心,只有 imageview 向左移动。当我更正可绘制左侧时,所有编辑文本都居中对齐 请告诉我它是否对您有帮助 抱歉延迟响应,但您的解决方案不起作用:/【参考方案4】:

使用 FrameLayout 代替相对布局,最后从父约束布局中删除该行..

tools:layout_editor_absoluteY="81dp"

【讨论】:

【参考方案5】:

尝试如下使用

<?xml version="1.0" encoding="utf-8"?>
    <androidx.appcompat.widget.LinearLayoutCompat
        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:layout_
        android:layout_gravity="center_vertical"
        android:gravity="center_vertical"
        android:layout_>

        <ImageView
                android:layout_
                android:layout_
                app:srcCompat="@drawable/fragment_client_add_address"
                android:id="@+id/imageView10"
                android:layout_marginEnd="12dp"
                android:layout_marginTop="8dp"/>

    </androidx.appcompat.widget.LinearLayoutCompat>

对于内容主要

<androidx.appcompat.widget.LinearLayoutCompat
    android:layout_
    android:layout_
    android:orientation="vertical">

    <FrameLayout
            android:id="@+id/frame_container"
            android:layout_
            android:layout_ />

</androidx.appcompat.widget.LinearLayoutCompat>

【讨论】:

【参考方案6】:

您可以使用属性app:layout_constraintVertical_bias 使其平等地偏向于父级。这也可以在布局编辑器中通过将布局的所有 4 面约束为父级来实现。

【讨论】:

发帖前试过了,没效果。 您使用的是什么版本的 ConstraintLayout 库?我已经完全尝试了您的 xml,它适用于“androidx.constraintlayout:constraintlayout:1.1.3”和 android 10 模拟器。我附上一张相同的图片 似乎我也在使用 'androidx.constraintlayout:constraintlayout:1.1.3' 但在我的 android 7 手机上运行和测试应用程序

以上是关于片段中的布局不居中的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将片段添加到android中的框架布局

片段中的recyclerview的“RecyclerView:没有附加适配器;跳过布局”[重复]

片段布局不覆盖整个屏幕

布局中的片段占位符

在片段中在运行时更改方向时更改布局而不重新创建视图

一个活动或单独活动中的多个片段