【Android+Kotlin】NestedScrollView

扉:

  1. 找了蛮多帖子感觉不是很友好,找到了一个帖子并升级了androidx
  2. 这个帖子不错
  3. AppBarLayout与沉浸式布局好看
  4. CollapsingToolLayout可折叠工具栏
  5. 下载地址[]

1. 效果图

  1. 上面是banner区域
    【Android+Kotlin】NestedScrollView
  2. 向下拖动到一定程度图片会变暗幕
    【Android+Kotlin】NestedScrollView
  3. 固定中间的悬浮部分 下侧RecycleView正常滑动
    【Android+Kotlin】NestedScrollView

2. 上代码

1. XML

  1. 注意事项
    1)将需要悬浮的layout放到CollapsingToolbarLayout之外,AppBarLayout之内
    2)将CollapsingToolbarLayout的app:layout_scrollFlags设置为scroll
    3)给滚动的NestedScroolView设置
    app:layout_behavior="@String/appbar_scrolling_view_behavior"
    就大功告成了(记得根布局要是CoordinatorLayout)
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    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:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="220dp"
            app:contentScrim="#000000"
            app:layout_scrollFlags="scroll">

            <androidx.appcompat.widget.AppCompatImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/banner"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"

                android:gravity="center"
                android:text="banner区域"
                android:textColor="#000000" />
        </com.google.android.material.appbar.CollapsingToolbarLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:gravity="center"
            android:text="悬浮的部分" />
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <com.ywjh.nestedscrollview.MyListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

2. MyListView

package com.ywjh.nestedscrollview

import android.content.Context
import android.util.AttributeSet
import android.widget.ListView


class MyListView : ListView {
    constructor(context: Context?) : super(context) {}
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
    }

    public override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        val expandSpec = MeasureSpec.makeMeasureSpec(
            Int.MAX_VALUE shr 2,
            MeasureSpec.AT_MOST
        )
        super.onMeasure(widthMeasureSpec, expandSpec)
    }
}

3. MAC

package com.ywjh.nestedscrollview

import android.os.Bundle
import android.view.View
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
import java.util.*


class MainActivity : AppCompatActivity() {
    private var lv: MyListView? = null
    private var list: MutableList<String?>? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        lv = findViewById<View>(R.id.lv) as MyListView
        list = ArrayList()
        for (i in 0..99) {
            list?.add(i.toString() + "")
        }
        val adapter: ArrayAdapter<*> =
            ArrayAdapter<Any?>(this, android.R.layout.simple_list_item_1,
                list as ArrayList<String?> as List<Any?>
            )
        lv!!.adapter = adapter
    }
}
上一篇:CoordinatorLayout+NestedScrollView+ExpandableListView滚动到ExpandableListView的指定位置


下一篇:当NestedScrollView嵌套WebView 并且 滑动WebView H5界面还会分页加载内容时,分页不起作用的解决办法