当我在Android Studio 3.1.1中使用约束时,为什么两个TextView位于LinearLayout的中心?

时间:2018-04-19 13:08:06

标签: android android-studio android-constraintlayout

我希望设计UI,UI的顶部是AD,UI的底部是关闭按钮,名为myLinearLayout的LinearLayout将填充其他空间。 所以我编写了下面的代码,然后我将两个TextView控件添加到myLinearLayout中的tvDetail和tvName。

我没有为两个TextView控件添加任何约束,我认为两个TextView控件将位于myLinearLayout的左侧和顶部。

但事实上它们位于myLinearLayout的中心(请参阅图片),为什么?

代码

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

    <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/ad_unit_id"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:id="@+id/myLinearLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="7dp"
        android:layout_marginRight="7dp"
        android:layout_marginTop="10dp"
        android:orientation="vertical"
        app:layout_constraintTop_toBottomOf="@+id/adView"
        app:layout_constraintBottom_toTopOf="@id/btnClose"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        >

        <TextView
            android:id="@+id/tvDetail"
            style="@style/myTextMedium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Details"
         />

        <TextView
            android:id="@+id/tvName"
            style="@style/myTextMedium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Name"
            />


    </LinearLayout>




    <Button
        android:id="@+id/btnClose"
        style="@style/myTextMedium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="2dp"
        android:layout_marginTop="2dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:text="@string/BtnClose"
        />


</android.support.constraint.ConstraintLayout>

图片 enter image description here

2 个答案:

答案 0 :(得分:2)

LinearLayout wrap_content宽度和高度0dp。 将它们设置为<LinearLayout android:id="@+id/myLinearLayout" android:layout_width="0dp" android:layout_height="0dp" ...>

Sub testPleaseWait()

UserForm1.Show vbModeless
Dim a As Integer
a = 0
While a < 1000
    Debug.Print a
    a = a + 1
Wend
Unload UserForm1

End Sub

0dp相当于“MATCH_CONSTRAINT”。请参阅ConstraintLayout documentation

答案 1 :(得分:0)

这是因为您的LinearLayout

上有以下内容
android:layout_width="wrap_content"
android:layout_height="wrap_content"

这使“LinearLayout”缩小为仅与其包含的内容一样宽和高。

更改您的layout_widthlayout_height,如下所示:

android:layout_width="match_parent"
android:layout_height="match_parent"

或者,给予layout_heightlayout_width一定的尺寸。