安卓16 设置壁纸中应用网格,有两个5X5的选项

复现步骤

复制代码
设置 - 壁纸 - 壁纸与风格 - 主屏幕 - 应用网格,发现有两个5X5的选项

要做的就是去掉一个5x5

解决

搜索关键词应用网格,发现不是在Setting中,而是在ThemePicker模块下,后续更改均在ThemePicker模块。 模块路径:packages/apps/ThemePicker。

根据应用网格定位:

xml 复制代码
strings.xml

<string name="grid_title" msgid="1688173478777254123">"应用网格"</string>

定位到布局文件grid_section_view.xml,这个布局文件其实是图片二内容,即一级目录,图片一展示的是二级目录的。这个一级目录布局对应的java文件为GridSectionView,但GridSectionView.java没内容,需要看GridSectionController.java

xml 复制代码
grid_section_view.xml

<com.android.customization.picker.grid.ui.view.GridSectionView
......


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/grid_title" // 这里
            style="@style/SectionTitleTextStyle" />

......
</com.android.customization.picker.grid.ui.view.GridSectionView>
java 复制代码
GridSectionController.java

gridSectionView.setOnClickListener(
        v -> {
            //代码中有点击事件的处理,即点击图片二中那个"应用网格"的处理事件,发现跳转的是GridFragment中调用了GridScreenBinder,我就是修改的这个Binder
            ```kotlin
            GridScreenBinder.kt
            
            lifecycleOwner.lifecycleScope.launch {
            lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
                launch {
                    viewModel.optionItems.collect { options ->
                        // According to the number of rows and columns, to avoid duplication.
                        Log.d(
                            "cmy-GridScreenBinder",
                            "collect optionItems: size=${options.size}, keys=${
                                options.joinToString { it.key.value }
                            }"
                        )

                        val uniqueOptions = options.distinctBy { it.key.value }

                        Log.d(
                            "cmy-GridScreenBinder",
                            "after distinctBy key: size=${uniqueOptions.size}, keys=${
                                uniqueOptions.joinToString { it.key.value }
                            }"
                        )

                        adapter.setItems(uniqueOptions)
                        onOptionsChanged()
                    }
                }
            }
        }
            ```
            final Fragment gridFragment = new GridFragment(); 
            mSectionNavigationController.navigateTo(gridFragment);
        });

在GridFragment中调用了GridScreenBinder,我就是修改的这个Binder

kotlin 复制代码
GridScreenBinder.kt

lifecycleOwner.lifecycleScope.launch {
    lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
        launch {
            viewModel.optionItems.collect { options ->
                // According to the number of rows and columns, to avoid duplication.
                // 这个log打印的是有两个5x5
                Log.d(
                    "cmy-GridScreenBinder",
                    "collect optionItems: size=${options.size}, keys=${
                        options.joinToString { it.key.value }
                    }"
                )
                
                
                // ********数据去重:使用 `distinctBy { it.key.value }`对 `options`进行去重,确保基于 `key`的唯一性
                val uniqueOptions = options.distinctBy { it.key.value } //

                // 这个log打印的是过滤之后的,只有一个5x5
                Log.d(
                    "cmy-GridScreenBinder",
                    "after distinctBy key: size=${uniqueOptions.size}, keys=${
                        uniqueOptions.joinToString { it.key.value }
                    }"
                )

                adapter.setItems(uniqueOptions) //**更新UI**:将去重后的列表 `uniqueOptions`设置给 `adapter`,从而更新界面显示
                onOptionsChanged()
            }
        }
    }
}

经过去重后,这样就只显示一个5x5选项了。

相关推荐
booboosui4 小时前
Android 上来电怎么判:7 个条件加 5 个中文词
android
MardaWang4 小时前
App 内嵌 H5 的信任边界设计(ArkWeb/HarmonyOS 实战)
android
石头慢慢说4 小时前
不写 XPath,让 AI 在真机上跑测试:Appium MCP 全流程实战
android
90后的晨仔6 小时前
解决 Android 构建报错:Unable to delete file .../file-map.txt
android·前端
mg6687 小时前
安卓玩机工具----安卓手机变成桌面电脑!多窗口镜像+音频投射+游戏操控,无需 Root
android·智能手机·电脑
peakmain97 小时前
异常处理 - Native 层的崩溃捕获机制及实现 (一)
android·性能优化
木头左8 小时前
【Android】听写播放器改版:中英文书写速度拆项与「正在读」高亮
android·room·media3·jetpack compose·听写
好的佩奇9 小时前
Dart 之方法、操作符与可调用对象
android·flutter·dart
恋猫de小郭9 小时前
Flutter Impeller Vulkan 内存持续上涨,问题没想到是文字阴影
android·前端·flutter