【问题标题】:ScrollView doesn't stay to a certain part of the screen and takes whole screenScrollView 不会停留在屏幕的某个部分并占据整个屏幕
【发布时间】:2022-10-06 00:54:38
【问题描述】:

我试图将 ScrollView 限制在屏幕的某个部分,因为我试图将横幅广告附加到屏幕底部,并且我希望横幅广告是静态的,而其余内容可以滚动因此我不希望横幅广告受到 ScrollView 的影响。出于某种原因,虽然当我运行我的应用程序时,我的设备屏幕上只有可滚动部分可见,但我的横幅广告根本没有出现。我已经尝试了多种方法来解决此问题以使其正常工作,但我仍然无法弄清楚。 这是我当前的 activity_main.xml 代码

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<androidx.constraintlayout.widget.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:orientation=\"vertical\"
android:background=\"@color/grey\"
tools:context=\".MainActivity\">


<ScrollView
    android:layout_width=\"match_parent\"
    android:layout_height=\"wrap_content\"
    app:layout_constraintEnd_toEndOf=\"parent\"
    app:layout_constraintStart_toStartOf=\"parent\"
    app:layout_constraintLeft_toLeftOf=\"parent\"
    app:layout_constraintRight_toRightOf=\"parent\"
    app:layout_constraintTop_toTopOf=\"parent\">

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

        <androidx.cardview.widget.CardView
            android:layout_margin=\"16dp\"
            app:cardCornerRadius=\"8dp\"
            app:cardElevation=\"8dp\"
            app:cardBackgroundColor=\"@color/blue\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\">
            <androidx.appcompat.widget.SearchView
                android:id=\"@+id/search_view\"
                app:defaultQueryHint=\"Search...\"
                app:iconifiedByDefault=\"false\"
                android:layout_width=\"match_parent\"
                android:layout_height=\"?attr/actionBarSize\"/>
        </androidx.cardview.widget.CardView>

        <LinearLayout
            android:layout_margin=\"16dp\"
            android:orientation=\"vertical\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"match_parent\">
            <TextView
                android:id=\"@+id/textView_a\"
                android:textSize=\"24sp\"
                android:text=\"A\"
                android:textColor=\"@color/blue\"
                android:textAlignment=\"center\"
                android:padding=\"8dp\"
                android:textStyle=\"italic\"
                android:layout_width=\"match_parent\"
                android:layout_height=\"wrap_content\"/>
            <androidx.recyclerview.widget.RecyclerView
                android:id=\"@+id/recycler_phonetics\"
                android:layout_width=\"match_parent\"
                android:layout_height=\"wrap_content\"/>
            <TextView
                android:textSize=\"24sp\"
                android:text=\"B\"
                android:textColor=\"@color/blue\"
                android:textAlignment=\"center\"
                android:padding=\"8dp\"
                android:textStyle=\"italic\"
                android:layout_width=\"match_parent\"
                android:layout_height=\"wrap_content\"/>
            <androidx.recyclerview.widget.RecyclerView
                android:id=\"@+id/recycler_meanings\"
                android:layout_width=\"match_parent\"
                android:layout_height=\"wrap_content\" />
        </LinearLayout>
    </LinearLayout>
</ScrollView>
<LinearLayout
    android:layout_width=\"match_parent\"
    android:layout_height=\"wrap_content\"
    app:layout_constraintBottom_toBottomOf=\"parent\">
    <com.google.android.gms.ads.AdView xmlns:ads=\"http://schemas.android.com/apk/res-auto\"
        android:id=\"@+id/adView\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"wrap_content\"
        ads:adSize=\"BANNER\"
        ads:adUnitId=\"ca-app-pub-3940256099942544/6300978111\"
        app:layout_constraintBottom_toBottomOf=\"parent\"
        app:layout_constraintEnd_toEndOf=\"parent\"
        app:layout_constraintStart_toStartOf=\"parent\">
    </com.google.android.gms.ads.AdView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

    标签: java android xml android-studio android-11


    【解决方案1】:

    首先,绝不Scrollview 内使用RecyclerView。相反,请使用NestedScrollView

    NestedScrollView 就像 ScrollView 一样,但它支持在新旧版本的 Android 上同时充当嵌套滚动父项和子项。默认情况下启用嵌套滚动。

    如果您不希望您的 RecyclerViews 首先也可滚动,请将您的内容作为子视图添加到布局视图中。

    其次,为了让您的ScrollView 占用AdView 提供的所有剩余空间,制作一个约束链并将ScrollView 的高度设置为0dp。这意味着,您需要将ScrollView 的底部限制到AdView 的顶部,反之亦然。

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
     ...>
        <android.support.v4.widget.NestedScrollView 
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:id="@+id/ScrollView"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/LinearAdLayout">
    
            <!--Your content here-->
    
        </android.support.v4.widget.NestedScrollView>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/LinearAdLayout"
            app:layout_constraintTop_toBottomOf="@id/ScrollView"
            app:layout_constraintBottom_toBottomOf="parent">
            
            <!--Your AdView here-->
    
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2021-03-11
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多