当前位置: 代码迷 >> 综合 >> 【Android+Kotlin】NestedScrollView
  详细解决方案

【Android+Kotlin】NestedScrollView

热度:54   发布时间:2023-12-15 11:09:27.0

扉:

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

1. 效果图

  1. 上面是banner区域
    在这里插入图片描述
  2. 向下拖动到一定程度图片会变暗幕
    在这里插入图片描述
  3. 固定中间的悬浮部分 下侧RecycleView正常滑动
    在这里插入图片描述

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.CoordinatorLayoutxmlns: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.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><com.google.android.material.appbar.CollapsingToolbarLayoutandroid:layout_width="match_parent"android:layout_height="220dp"app:contentScrim="#000000"app:layout_scrollFlags="scroll"><androidx.appcompat.widget.AppCompatImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/banner"/><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="banner区域"android:textColor="#000000" /></com.google.android.material.appbar.CollapsingToolbarLayout><TextViewandroid:layout_width="match_parent"android:layout_height="30dp"android:gravity="center"android:text="悬浮的部分" /></com.google.android.material.appbar.AppBarLayout><androidx.core.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"><com.ywjh.nestedscrollview.MyListViewandroid: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.nestedscrollviewimport android.content.Context
import android.util.AttributeSet
import android.widget.ListViewclass 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.nestedscrollviewimport 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? = nullprivate var list: MutableList<String?>? = nulloverride fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)lv = findViewById<View>(R.id.lv) as MyListViewlist = 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}
}
  相关解决方案