android - ScrollView 不使用 ConstraintLayout 和指南滚动

标签 android android-scrollview android-constraintlayout

我必须制作一个布局,上面有图像,上面有文本。图像高度必须是根布局高度的 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/

相关文章:

android - 在 Android 上以编程方式锁定屏幕

android - 在 android 上隐藏/显示 xml

android - 蓝牙工作

android - ScrollView 内的 ScrollView

java - Android - 将对象保存到 SharedPreferences 并在应用程序中的任何位置获取它

android - ScrollView 中的图库 View 不起作用。

java - 我可以在 Android 中以编程方式滚动 ScrollView 吗?

Android 不均匀设计

android - ConstraintLayout 在 GUI 编辑器 Android Studio 3.0 - Canary 4 中不起作用

android - 约束布局 TextView 不显示