将两个视图放在屏幕中央

Put two views in the center of the screen

我有两个视图(com.github.mikephil.charting.charts.BarChart 和 LinearLayout),一个视图中的内容大约有 600 dp 高,另一个有 500 dp。两个视图的宽度都是 fill_parent.

我想将它们都放在屏幕中央(这样它们就会重叠)。

不幸的是,Android 的布局对齐方式非常不直观,对我来说是命中注定,我无法做到这一点。

你能帮忙吗?

               <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:gravity="center"
                android:orientation="vertical"
                android:background="#11FFFFFF">

                <com.github.mikephil.charting.charts.BarChart
                    android:id="@+id/chart"
                    android:layout_width="match_parent"
                    android:layout_height="500dp"
                    />

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="horizontal"
                    android:gravity="center">

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="50dp"
                        android:orientation="vertical"
                        android:gravity="center">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textColor="#FFFFFF"
                            android:textSize="150dp"
                            android:includeFontPadding="false"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="10dp"
                            android:text="HITS"
                            android:textAppearance="?android:attr/textAppearanceLarge"/>
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="50dp"
                        android:orientation="vertical"
                        android:gravity="center">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textColor="#FFFFFF"
                            android:textSize="150dp"
                            android:includeFontPadding="false"/>

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="10dp"
                            android:text="MISSED"
                            android:textAppearance="?android:attr/textAppearanceLarge"/>
                    </LinearLayout>
                </LinearLayout>

            </RelativeLayout>

我想将两个视图放置在屏幕中央的这个 RelativeLayout 内,重叠

把你想放在中间的2个视图放在RelativeLayout里面,然后把android:layout_centerInParent="true"加到2个视图里。

例如它看起来像这样:

<RelativeLayout  
     android:layout_width="match_parent"
     android:layout_height="match_parent">
       <com.github.mikephil.charting.charts.BarChart
            ....all other stuff

            android:layout_centerInParent="true" > //..add this 


      <LinearLayout
           ..... all other stuff
           android:layout_centerInParent="true"  > //..add this 


      </LinearLayout>

</RelativeLayout>

将您的主要布局定义为 ConstraintLayout,然后将两个元素的所有边都约束到它们的父元素。 像这样:

<?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">

        <LinearLayout
            android:layout_width="600dp"
            android:layout_height="600dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">


        </LinearLayout>


        <com.github.mikephil.charting.charts.BarChart
            android:layout_width="500dp"
            android:layout_height="500dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">


        </com.github.mikephil.charting.charts.BarChart>

</android.support.constraint.ConstraintLayout>

使用此代码,您的 BarChart 位于 LinearLayout 之上。

根据我的经验,大多数时候最好使用尽可能轻的容器,在这种情况下可能是 FrameLayout,所以我会使用它而不是 RelativeLayout 并使用 android:layout_gravity="center" 在这样的子视图中,例如:

<FrameLayout  
     android:layout_width="match_parent"
     android:layout_height="match_parent">
       <com.github.mikephil.charting.charts.BarChart
            android:layout_gravity="center" > 

      <LinearLayout
            android:layout_gravity="center" >
      </LinearLayout>

</FrameLayout>