我必须制作一个布局,上面有图像,上面有文本。图像高度必须是根布局高度的 40%。文本的高度可变。因此,整个事情必须放在 ScrollView 中。
这是我的代码:
<?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>
布局就像我想要的那样,但是一旦我放入Guideline,ScrollView就不再滚动了。
我犯了什么错误以及如何实现所需的布局和行为?
最佳答案
辅助线和 ImageView 必须具有相同的 ConstraintLayout
作为父 View 。将引用线移到 ImageView 上方,您就应该完成设置了。
顺便说一句,您可能不需要最外面的ConstraintLayout
。您还可以摆脱嵌套的 LinearLayout 以获得更扁平的布局。
您设定的指导方针是基于百分比的。不幸的是,这个百分比似乎只是 View 可滚动总高度的一小部分,而不仅仅是您在屏幕上看到的高度。
您希望图像占据 ScrollView 可见部分的 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
,但我无法让它工作。你可能会有更好的运气。
关于android - ScrollView 不使用 ConstraintLayout 和指南滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608549/