如何将线性布局居中到其父级的中间?

时间:2018-03-30 14:58:06

标签: android android-layout

我正在编写我的第一个完整的Android应用程序,我希望将线性布局居中,以便布局本身居中,而不仅仅是布局内的内容。我已经看到android:layout_gravity用于执行此操作的旧帖子,但是当我将其输入到我的活动的XML there are no suggestionsnothing happens when fully entered中时。

我不应该使用线性布局来实现这一目标吗?我应该制作它的大小match_parent并限制其所有孩子的大小吗?我对布局的想法是约束线性布局的大小,使其居中,并使其所有子级的水平尺寸为match_parent

以下是我的活动的XML供参考:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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_width="match_parent"
android:layout_height="match_parent"
tools:context="com.frc5113.combustiblescouting.MainActivity">

<LinearLayout
    android:layout_width="140dp"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Team Number" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Color" />

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

您的根布局是ConstraintLayout。我认为这不支持属性layout_gravity。您应该使用LinearLayout或使用相对于根视图的约束here

答案 1 :(得分:0)

试试这个,它会使你的容器水平和放大垂直中心同时:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     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_width="match_parent"
     android:layout_height="match_parent"
     tools:context="com.frc5113.combustiblescouting.MainActivity"
     android:orientation="vertical"
     android:gravity="center">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Team Number" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Color" />

</LinearLayout>

答案 2 :(得分:0)

在LinearLayout上使用android:gravity="center"会将其孩子置于其中心。

会有android:layout_gravity属性告诉家长这个孩子想要如何布置。但这需要容器的LayoutParams支持(例如FrameLayout,LinearLayout ......) 但是Constraintlayout并不支持这种儿童引力。 在这里,您需要在子项上设置约束(在您的情况下为LinearLayout),以便正确放置它。

因此,如果你想让LinearLayout居中(这会以某种方式过时,因为你可以将它的子项直接放在ConstraintLayout中) 你可以像下面那样实现这个目标:

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="140dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent">

        <!-- content -->

    </LinearLayout>
</android.support.constraint.ConstraintLayout>