2017-08-24 56 views
1

我正在開發一個Android活動,我想要一個標題,並在標題下的內容。我想要將背景圖像放在內容上,而不是標題上。Android - 限制佈局內另一個約束佈局背景不顯示

enter image description here

從圖片中可以看到我的形象也streched在屏幕上,這是我不希望的標識部。

這裏是我當前佈局的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" 
    android:background="@drawable/background_11" 
    tools:context=".login.LoginActivity" 
    > 

    <ImageView 
     android:id="@+id/logo" 
     android:layout_width="381dp" 
     android:layout_height="156dp" 
     android:src="@drawable/logo" 
     tools:ignore="ContentDescription" 
     app:layout_constraintTop_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     android:layout_marginTop="-480dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginStart="10dp" 
     android:layout_marginEnd="10dp" 
     app:layout_constraintHorizontal_bias="0.47" /> 

    <ImageView 
     android:id="@+id/emptyImage" 
     android:layout_width="384dp" 
     android:layout_height="445dp" 
     android:layout_marginBottom="0dp" 
     android:layout_marginRight="0dp" 
     android:layout_marginTop="0dp" 
     android:background="@color/TICK_BACKGROUND" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/logo" 
     app:layout_constraintVertical_bias="0.0" 
     app:srcCompat="@drawable/empty" /> 

    <EditText 
     android:id="@+id/login_usernameTextField" 
     android:layout_width="291dp" 
     android:layout_height="63dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginTop="80dp" 
     android:background="@drawable/rounded_text_edit_shape" 
     android:ems="10" 
     android:hint="Username" 
     android:inputType="textPersonName" 
     android:textColor="@color/INPUT_TEXT_COLOR" 
     android:textColorHint="@color/iron" 
     android:textCursorDrawable="@null" 
     app:layout_constraintHorizontal_bias="0.506" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/logo" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" /> 

    <EditText 
     android:id="@+id/login_passwordTextField" 
     android:layout_width="291dp" 
     android:layout_height="63dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginTop="-38dp" 
     android:background="@drawable/rounded_text_edit_shape" 
     android:ems="10" 
     android:hint="Password" 
     android:textCursorDrawable="@null" 
     android:inputType="textPassword" 
     android:textColor="@color/INPUT_TEXT_COLOR" 
     android:textColorHint="@color/iron" 
     app:layout_constraintHorizontal_bias="0.506" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/login_usernameTextField" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" /> 

    <Button 
     android:id="@+id/login_loginButton" 
     android:onClick="loginButtonClick" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginTop="30dp" 
     android:background="@drawable/rounded_button_shape" 
     android:text="Log In" 
     android:textColor="@color/white" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/login_passwordTextField" 
     app:layout_constraintBottom_toBottomOf="parent" 
     android:layout_marginBottom="8dp" 
     app:layout_constraintVertical_bias="0.28" 
     android:layout_marginStart="8dp" 
     android:layout_marginEnd="8dp" /> 

</android.support.constraint.ConstraintLayout> 

我想過做父母佈局和佈局內添加頁眉和包含內容的另一佈局。然後設置內容佈局內的背景像這樣的:android:background="@drawable/background_11"

這裏是我試過的代碼:

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




    <ImageView 
     android:id="@+id/logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     app:srcCompat="@drawable/logo_2" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginTop="-1dp" 
     android:layout_marginLeft="0dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginRight="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintHorizontal_bias="0.0" /> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:background="@drawable/background_11" 
     app:layout_constraintTop_toBottomOf="@id/logo" 
     android:layout_marginLeft="8dp" 
     app:layout_constraintLeft_toLeftOf="parent"> 

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

然而,我的背景沒有顯示出來。下面是reuslts: enter image description here

回答

1

我把它通過使線性佈局內的約束佈局工作:

<?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" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <ImageView 
     android:id="@+id/imageView5" 
     android:layout_width="wrap_content" 
     android:layout_height="146dp" 
     app:srcCompat="@drawable/netset_logo_2" /> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="@drawable/background_11"> 

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

enter image description here

不過我不明白爲什麼我的第一個解決方案工作。爲什麼不能在約束佈局內添加約束佈局?

+0

酷,男人! Wiil也嘗試 – Sergey

1

您可以在其他ConstraintLayout中使用ConstraintLayout,但您需要遵守一些規則。 ConstraintLayout的所有直接孩子都應該對左,上,右,下都有約束。

我認爲沒有內部ConstraintLayout左右的約束,他有一個寬度和高度等於0dp,他不顯示。

你有沒有嘗試添加約束左和rigth到你的內部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"> 

    <ImageView 
     android:id="@+id/logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     app:srcCompat="@drawable/logo_2" 
     app:layout_constraintTop_toTopOf="parent" 
     android:layout_marginTop="-1dp" 
     android:layout_marginLeft="0dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     android:layout_marginRight="8dp" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintHorizontal_bias="0.0" /> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:background="@drawable/background_11" 
     app:layout_constraintTop_toBottomOf="@id/logo" 
     android:layout_marginLeft="8dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent"> 

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

希望這會有所幫助。

0

很自然地,你使約束佈局佔據了整個屏幕,而Logo佔據了它的一個較小的子集。 因此,您的屏幕上有徽標,背景下方有徽標。 您可能需要在主約束佈局內的不同子佈局上設置「背景」。

像這樣

<constraintlayout 
width:match_parent 
height:match_parent> 
    <logo here/> 
    <constraintlayout 
    background_here> 
    <constraintlayout/> 
<constraintlayout/> 

希望這是有道理的。