片段中的布局不居中
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】:RelativeLayout
content 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 手机上运行和测试应用程序以上是关于片段中的布局不居中的主要内容,如果未能解决你的问题,请参考以下文章