2017-10-06 587 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