首页 > 解决方案 > 约束布局和滚动视图不起作用

问题描述

我正在尝试为我的 Android 应用程序实现布局。在设计器中,我可以看到一切都很好,但是当我模拟(或者当我在手机上安装应用程序时)时,外观完全不同。我附上它在设计器中的显示方式。我看到了所有东西(如我所愿),带有一个 TextView、一个 ScrollView 和一个按钮,用于关闭对话框。

图像的蓝图视图

图像的蓝图视图

当我模拟时,情况完全不同:没有办法玩“match_parent”、“wrap_content”等,以获得好的结果。我看到一个完全不同的结果如下。

在设备上模拟

在设备上模拟

我将此布局应用于对话框,但我不明白为什么我无法获得带有 textview、cardwiev 的滚动视图和按钮的简单布局。

这是用于显示对话框的代码片段:

public void Display_Data_CardView(int mode){
    Data_CardView_Dialog = new Dialog(this);
    Data_CardView_Dialog.getWindow();
    Data_CardView_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    Data_CardView_Dialog.setCancelable(false);
    try{
        if (mode == NO_IN_ANIM){
            Data_CardView_Dialog.getWindow().getAttributes().windowAnimations = R.style.DialogTheme2_no_in_anim;
        }else Data_CardView_Dialog.getWindow().getAttributes().windowAnimations = R.style.DialogTheme2;
    }catch (Exception e){

    }
    Data_CardView_Dialog.setContentView(R.layout.data_view_cards);


    Button btnOK = (Button) Data_CardView_Dialog.findViewById(R.id.btnCardViewOK);
    btnOK.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Data_CardView_Dialog.dismiss();
        }
    });
    Data_CardView_Dialog.show();
}

这里是我的 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:id="@+id/clDataViewCards"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp">

    <TextView
        android:id="@+id/tvTitoloDataCardView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:text="Dati Letti"
        android:textSize="16sp"
        android:textStyle="bold|italic"
        app:layout_constraintBottom_toTopOf="@+id/glHoriz1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

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

    <ScrollView
        android:id="@+id/svDataViewCards"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:fillViewport="true"
        app:layout_constraintBottom_toTopOf="@+id/glHoriz2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/glHoriz1">

        <LinearLayout
            android:id="@+id/item_wrapper_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingBottom="8dp">

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard1"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView11"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 1" />

                        <TextView
                            android:id="@+id/textView12"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 2" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard2"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView21"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 3" />

                        <TextView
                            android:id="@+id/textView22"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 4" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard3"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView31"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 5" />

                        <TextView
                            android:id="@+id/textView32"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 6" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard4"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView41"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 7" />

                        <TextView
                            android:id="@+id/textView42"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 8" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_5"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard5"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView51"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 9" />

                        <TextView
                            android:id="@+id/textView52"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 10" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_6"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard6"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView61"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 11" />

                        <TextView
                            android:id="@+id/textView62"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 12" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_7"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard7"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView71"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 13" />

                        <TextView
                            android:id="@+id/textView72"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 14" />

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>

            <android.support.v7.widget.CardView
                android:id="@+id/item_cardview_8"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="4dp"
                app:cardUseCompatPadding="true">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageView
                        android:id="@+id/ivCard8"
                        android:layout_width="36dp"
                        android:layout_height="36dp"
                        android:layout_margin="8dp"
                        android:src="@drawable/info_icon"
                        tools:ignore="contentDescription" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="4dp"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/textView81"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginBottom="4dp"
                            android:text="TextView 15" />

                        <TextView
                            android:id="@+id/textView82"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="4dp"
                            android:text="TextView 16/>

                    </LinearLayout>
                </LinearLayout>

            </android.support.v7.widget.CardView>


        </LinearLayout>
    </ScrollView>

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

    <Button
        android:id="@+id/btnCardViewOK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:text="@string/Dialogo_View_Data_Cards_Bottone_OK"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/glHoriz2" />
</android.support.constraint.ConstraintLayout>

谁能帮我理解我错在哪里?非常感谢。

编辑 我找到了一个解决方案:我将滚动视图关闭到一个线性布局中,然后我为该线性布局指定了一个宽度“匹配约束”。在java中,当我创建对话框时,我改变了对话框的宽度,改变了第一个TextView的宽度,然后我改变了滚动视图的高度,我得到了我想做的事情。我不知道这是否是思考的方式,但经过多次尝试,这对我有好处。

标签: androidandroid-cardviewandroid-scrollviewandroid-constraintlayout

解决方案


请尝试使用 NestedScrollview,而不是使用 Scrollview。


推荐阅读