最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Jetpack Compose實現(xiàn)列表吸頂效果

 更新時間:2022年02月22日 16:33:10   作者:九狼  
安卓傳統(tǒng)的Recyclerview打造懸浮頭部StickyHeader的吸頂效果,十分麻煩,而在Compose中就簡單多了。因此,本文將采用Jetpack Compose實現(xiàn)列表吸頂效果,需要的可以參考一下

安卓傳統(tǒng)的 Recyclerview 打造懸浮頭部StickyHeader的吸頂效果,十分麻煩,而在Compose中就簡單多了

stickyHeader

Compose設(shè)計的時候考慮得很周到,他們提供了stickyHeader

作用就是添加一個粘性標題項,即使在它后面滾動時也會保持固定。標頭將保持固定,直到下一個標頭取而代之。

參數(shù)key - 表示唯一的密鑰鍵。

它不允許對列表出現(xiàn)使用相同的鍵。密鑰的類型應該可以通過 Bundle 保存。如果傳遞了 null,則列表中的位置將代表鍵。當指定鍵時,滾動位置將基于該鍵保持,這意味著如果在當前可見項目之前添加刪除項目,則具有給定鍵的項目將保留為第一個可見項目。

參數(shù)content 傳入Composable控件就即可顯示

實體類

創(chuàng)建一個實體類標題和內(nèi)容

data class Post(
    val title:String,
    val contentData:List<String>
)

加載假數(shù)據(jù)

val list : MutableList<Post> = mutableListOf()
for (index in 1..10) {
    val contentData :MutableList<String> = mutableListOf()
    for (i in 1..30){
        contentData.add("內(nèi)容 $i")
    }
    list.add(Post("標題$index",contentData))
}

定義一個垂直滾動列表,僅構(gòu)成和布局當前可見的項目

LazyColumn {
    list.forEachIndexed { position, post ->
        stickyHeader {
            ListTitle(title = post.title)
        }

        items(post.contentData.size) { route ->
            StructureItem(post.contentData)
        }
        if (position <= list.size - 1) {
            Divider()
        }
        Spacer(modifier = Modifier.height(10.dp))
    }
}

吸頂標題

接著封裝一個吸頂標題,并傳出點擊事件

@Composable
fun ListTitle(
    onSubtitleClick: () -> Unit = {}
) {
        MediumTitle(
            title = title,
            modifier = Modifier.align(Alignment.CenterVertically).clickable {
                onSubtitleClick.invoke()
            }
}

效果圖

二級條目

接著寫二級條目

FlowRow可以將其子項置于水平流中的可組合項。如果水平空間太小而無法將所有子項放在一行中,則可能會使用多行。傳統(tǒng)的流式布局

用法很簡單,和row一樣

FlowRow {
    for (item in bean) {
        TextButton(
           ....
        }
    }
}

在content可組控件里面添加多個TextButton即可

fun StructureItem{
    Column{
        FlowRow() {
            for (item in bean) {
                TextButton
                {
                    Text()
                }

            }
        }

    }
}

效果圖

接著吸頂標題放在LazyColumn里面就完成了

LazyColumn() {
    list.forEachIndexed { position, post ->
        stickyHeader {
            ListTitle(title = post.title) {
                //點擊事件
            }
        }
        item {
            StructureItem(post.contentData)
            Spacer(modifier = Modifier.height(10.dp))
        }
    }
}

完整代碼

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun StickyHeaderScreen() {
    val list: MutableList<Post> = mutableListOf()
    for (index in 1..10) {
        val contentData: MutableList<String> = mutableListOf()
        for (i in 1..12) {
            contentData.add("內(nèi)容 $i")
        }
        list.add(Post("標題$index", contentData))
    }
    LazyColumn(
        modifier = Modifier
            .fillMaxWidth()
            .fillMaxHeight(),
        contentPadding = PaddingValues(vertical = 10.dp)
    ) {
        list.forEachIndexed { position, post ->
            stickyHeader {
                ListTitle(title = post.title) {
                    //點擊事件
                }
            }
            item {
                StructureItem(post.contentData)
                Spacer(modifier = Modifier.height(10.dp))
            }
        }
    }
}

data class Post(
    val title: String,
    val contentData: List<String>
)

@Composable
fun ListTitle(
    modifier: Modifier = Modifier,
    title: String,
    isLoading: Boolean = false,
    onSubtitleClick: () -> Unit = {}
) {
    Row(
        modifier = modifier
            .placeholder(false)
            .fillMaxWidth()
            .height(ListTitleHeight)
            .background(color = Color.Gray)
    ) {
        Box(
            modifier = Modifier
                .padding(horizontal = 10.dp)
                .width(5.dp)
                .height(16.dp)
                .align(Alignment.CenterVertically)
                .background(color = Color.Black)
        )
        MediumTitle(
            title = title,
            color = Color.Black,
            modifier = Modifier.align(Alignment.CenterVertically).clickable {
                onSubtitleClick.invoke()
            },
            isLoading = isLoading
        )
        Spacer(modifier = Modifier.weight(1f))
    }

}


@Composable
fun StructureItem(
    bean: List<String>
) {
    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(top = 10.dp)
    ) {

        FlowRow(
            modifier = Modifier.padding(horizontal = 6.dp)
        ) {


            for (item in bean) {
                Box(modifier = Modifier.padding(horizontal = 2.dp, vertical = 3.dp)) {
                    TextButton(
                        modifier = Modifier.padding(horizontal = 3.dp).height(34.dp),
                        shape = RoundedCornerShape(12.dp),
                        onClick = { },
                        colors = ButtonDefaults.textButtonColors(
                            backgroundColor = themeColor
                        )
                    )
                    {
                        Text(
                            item,
                            color = Color.White
                        )
                    }

                }
            }
        }

    }
}

效果圖

左邊的黑邊是我裁剪的問題,抱歉啦!

到此這篇關(guān)于Android Jetpack Compose實現(xiàn)列表吸頂效果的文章就介紹到這了,更多相關(guān)Jetpack Compose列表吸頂內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • android textview 顯示html方法解析

    android textview 顯示html方法解析

    現(xiàn)在網(wǎng)絡(luò)的繁盛時代,光文字是不能滿足人們的胃口的,圖片,flash,音頻,視頻就成為瀏覽網(wǎng)頁的主流顯示,在手機上也一樣,本文將詳細介紹此功能的實現(xiàn)方法
    2012-11-11
  • Android中Service和Activity相互通信示例代碼

    Android中Service和Activity相互通信示例代碼

    在android中Activity負責前臺界面展示,service負責后臺的需要長期運行的任務。下面這篇文章主要給大家介紹了關(guān)于Android中Service和Activity相互通信的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Android如何實現(xiàn)時間線效果

    Android如何實現(xiàn)時間線效果

    這篇文章主要介紹了?Android如何實現(xiàn)時間線效果,下面文章圍繞?Android如何實現(xiàn)時間線效果的相關(guān)資料展開詳細內(nèi)容,具有一定的參考價值?,需要的朋友可以參考一下
    2021-11-11
  • Android中Fragment的解析和使用詳解

    Android中Fragment的解析和使用詳解

    現(xiàn)在Fragment的應用真的是越來越廣泛了,之前Android在3.0版本加入Fragment的時候,主要是為了解決Android Pad屏幕比較大,空間不能充分利用的問題,但現(xiàn)在即使只是在手機上,也有很多的場景可以運用到Fragment了,這篇文章給大家介紹了Android中Fragment的解析和使用。
    2016-11-11
  • Android 中SwipeRefreshLayout與ViewPager滑動事件沖突解決方法

    Android 中SwipeRefreshLayout與ViewPager滑動事件沖突解決方法

    這篇文章主要介紹了Android 中SwipeRefreshLayout與ViewPager滑動事件沖突解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Android獲取手機通話記錄的方法

    Android獲取手機通話記錄的方法

    這篇文章主要為大家詳細介紹了Android獲取手機通話記錄的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • android電源信息查看(電量、溫度、電壓)實例代碼

    android電源信息查看(電量、溫度、電壓)實例代碼

    這篇文章主要介紹了android電源信息查看方法,以實例形式較為詳細的分析了Android實現(xiàn)電源電量、電壓、溫度等信息查看的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android自定義View實現(xiàn)漸變色進度條

    Android自定義View實現(xiàn)漸變色進度條

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)漸變色進度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android控件之TabHost用法實例分析

    Android控件之TabHost用法實例分析

    這篇文章主要介紹了Android控件之TabHost用法,以完整實例形式較為詳細的分析了TabHost控件實現(xiàn)選項卡的相關(guān)技巧,需要的朋友可以參考下
    2015-09-09
  • 詳解Android App卸載后跳轉(zhuǎn)到指定的反饋頁面的方法

    詳解Android App卸載后跳轉(zhuǎn)到指定的反饋頁面的方法

    這篇文章主要介紹了Android App卸載后跳轉(zhuǎn)到指定的反饋頁面的方法,關(guān)鍵點是相關(guān)線程要判斷在目錄被消除以前作出響應,需要的朋友可以參考下
    2016-04-04

最新評論

三亚市| 嘉祥县| 祁阳县| 枣阳市| 伊宁县| 和顺县| 天门市| 绿春县| 五河县| 临汾市| 错那县| 田东县| 南和县| 台中县| 华池县| 黔江区| 饶河县| 柞水县| 通道| 乌鲁木齐市| 蓬溪县| 阿拉善左旗| 盘山县| 望奎县| 赣榆县| 石家庄市| 轮台县| 耒阳市| 炎陵县| 嘉荫县| 长泰县| 义乌市| 汉中市| 卢龙县| 阜阳市| 通河县| 博白县| 合江县| 翁牛特旗| 新化县| 揭西县|