2017-10-06 627 views
1

滾動我必須使用頂部的圖像和上面的文本進行佈局。圖像高度必須是根佈局高度的40%。文字高度可變。因此,整個事情必須放在一個ScrollView中。ScrollView無法使用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" 
android:background="@color/colorTutorialGrey" 
> 


<ScrollView 
    android:layout_width="0dp" 
    android:layout_height="0dp" 
    app:layout_constraintTop_toTopOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    android:fillViewport="true" 
    > 

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

     <android.support.constraint.Guideline 
      android:id="@+id/guideline" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:layout_constraintGuide_percent="0.4"/> 

     <ImageView 
      android:id="@+id/tutorial_image" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:scaleType="centerCrop" 
      app:layout_constraintTop_toTopOf="parent" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintBottom_toTopOf="@+id/guideline" 
      tools:src="@drawable/splash_bg" 
      /> 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:padding="32dp" 
      app:layout_constraintTop_toBottomOf="@id/guideline" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      > 

      <TextView 
       android:id="@+id/tutorial_title" 
       style="@style/Tutorial.Title" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       tools:text="Alle Neuerungen der App auf einen Blick" 
       /> 

      <TextView 
       android:id="@+id/tutorial_description" 
       style="@style/Tutorial.Description" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       tools:text="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet." 
       /> 

     </LinearLayout> 

    </android.support.constraint.ConstraintLayout> 

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

佈局就像它是理想的,但只要我把該指引時,滾動型不會再滾動。

我犯了什麼錯誤,我該如何達到理想的佈局和行爲?

+0

爲什麼您使用約束佈局.... –

+0

我看到了'Guideline'觀點是出了第二個'ConstraintLayout' –

+0

我並不需要使用ConstraintLayout的,但我需要實現: - 的ImageView的和TextView必須位於ScrollView中 - ImageView必須具有根佈局高度的40% - TextView具有可變高度,並且也可以超過根佈局高度的60% – sneps

回答

1

準則和圖像視圖必須具有與父母相同的ConstraintLayout。移動圖像視圖上方的準線,並且應該設置。

在旁註中,您可能不需要最外層的ConstraintLayout。你也可以擺脫嵌套的LinearLayout以獲得更平坦的佈局。


您設置的指南是基於百分比。不幸的是,這個百分比似乎是視圖總高度的可滾動高度的一小部分,而不僅僅是您在屏幕上看到的高度。

您希望圖像佔用滾動視圖可見部分的40%。我建議你設置的指導方針中的XML是一個固定大小(app:layout_constraintGuide_begin="100dp"例如),並改變方針放置在代碼中做類似如下:

protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.scrollable); 
    final ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.layout); 

    layout.post(new Runnable() { 
     @Override 
     public void run() { 
      final ScrollView scrollView = (ScrollView) layout.findViewById(R.id.scrollView); 
      final Guideline guideline = (Guideline) findViewById(R.id.guideline); 
      final ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) guideline.getLayoutParams(); 
      lp.guideBegin = (int) ((scrollView.getHeight()) * 0.4); 
      guideline.setLayoutParams(lp); 
     } 
    }); 
} 

我會建議使用ConstraintSet#setGuidelineBegin,但我可以」不要讓它工作。你可能會有更好的運氣。

+0

我更新了上面的代碼,但滾動視圖不會滾動,只要我把一個Guidline約束(ImageView)。 – sneps

+0

@sneps似乎無法與'ConstraintLayout' 1.0.2一起使用,但可以與我正在使用的1.1.0-beta2一起使用。你可以使用1.1.0-beta2嗎? – Cheticamp

+0

滾動功能可以與1.1.0-beta2一起使用,但圖像的40%高度現在是內部約束佈局高度的40%。但我需要視口高度的40%(或根約束佈局或滾動視圖)。任何想法? – sneps