仅更改底部导航视图的一个图标的大小(Android)

2024-03-03

我只想更改底部导航视图中使用的 5 个图标中的一个图标(第三个图标)的大小。

我想要中心图标像这样大:

这是我尝试过的:

private fun setReportPainIconSize(){
        val bottomNavigationView =
            findViewById<BottomNavigationView>(R.id.navigationBottomView)

    val menuView: BottomNavigationMenuView =
            bottomNavigationView.getChildAt(0) as BottomNavigationMenuView
     
    val iconView: View = menuView.getChildAt(2) **//TO GET REFERENCE OF 3RD ITEM**
                    .findViewById(androidx.core.R.id.icon)
           
    val layoutParams: ViewGroup.LayoutParams = iconView.layoutParams
            val displayMetrics: DisplayMetrics = resources.displayMetrics
            layoutParams.height = TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 47F,
                displayMetrics
            ).toInt()
            layoutParams.width = TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 44F,
                displayMetrics
            ).toInt()
            iconView.layoutParams = layoutParams
    }

但在运行我的应用程序时崩溃,我收到的错误消息是:

Caused by: java.lang.NullPointerException: menuView.getChildAt(2)
     …(androidx.core.R.id.icon) must not be null

我该如何实现它? ?请帮忙!


使用最新的材料设计库(com.google.android.material:material:1.6.1)获取菜单图标视图引用的 id 是com.google.android.material.R.id.navigation_bar_item_icon_view

因此,您可以通过编程方式更改特定菜单项的大小BottomNavigationView像下面的示例:

//find the icon view for the menu item index 1
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)
val menu = bottomNavigationView.menu
val menuItem = menu.getItem(1)
val navigationBarItemView: NavigationBarItemView = bottomNavigationView.findViewById(menuItem.itemId)
val iconView: View = navigationBarItemView.findViewById(com.google.android.material.R.id.navigation_bar_item_icon_view)

//set the new width and height for the iconView in pixels. You can change also the bottom margin of the icon View.
val iconViewParams: FrameLayout.LayoutParams = iconView.layoutParams as FrameLayout.LayoutParams
iconViewParams.width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 44F, resources.displayMetrics).toInt()
iconViewParams.height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 47F, resources.displayMetrics).toInt()
iconViewParams.bottomMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 35F, resources.displayMetrics).toInt()
iconView.layoutParams = iconViewParams

还可以在上面画一些东西BottomNavigationView就像居中的图标一样,您必须将所有 ViewGroup 父级设置为BottomNavigationView具有clipChildren = false and clipToPadding = false使用如下递归函数:

fun recursiveClipChildrenAndClipToPadding(parent: ViewGroup) {

    if(parent is BottomNavigationView){
        val bottomNavigationView = parent as BottomNavigationView
        bottomNavigationView.clipChildren = false
        bottomNavigationView.clipToPadding = false
    }
    for (i in 0 until parent.childCount) {
        val child = parent.getChildAt(i)
        if (child is ViewGroup) {
            val vGroup = child as ViewGroup
            vGroup.clipChildren = false
            vGroup.clipToPadding = false
            recursiveClipChildrenAndClipToPadding(vGroup)
        }
    }
}

你必须这样称呼它:

recursiveClipChildrenAndClipToPadding(bottomNavigationView)

我使用一些默认图标制作的示例结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅更改底部导航视图的一个图标的大小(Android) 的相关文章

  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 原色(有时)变得透明

    我正在使用最新的 SDK 版本 API 21 和支持库 21 0 2 进行开发 并且在尝试实施新的材料设计指南时遇到了麻烦 材料设计说我需要有我的primary color and my accent color并将它们应用到我的应用程序上
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • 从同级目录导入

    我有一个名为 ClassA 的Python 类和另一个Python 类 该类应该导入ClassA 即 ClassB 目录结构如下 MainDir Dir DirA ClassA DirB ClassB 我将如何使用sys path那么Cla
  • 从子视图将 Javascript 文件附加到 InlineScript 集合的末尾

    我正在使用 Zend Framework 2 在我的布局文件中 我注入了一些像这样的 javascript 文件 this gt InlineScript gt appendFile this gt basePath js myfile j
  • ASP .NET MVC 保护控制器/操作

    如果我只想管理员访问名为 ManagerUser 的操作 我知道我可以这样做 Authorize Roles Constants ROLES ADMINISTRATOR public ActionResult ManageUser stri
  • Tomcat Maven 插件 - 子容器在启动期间失败

    我正在开发一个多模块 Maven 项目 我想在 Tomcat 7 中运行我的 Web 项目 但出现此错误 子容器在启动期间失败 我继续 右键单击网络项目 gt 运行方式 gt 运行配置 gt 目标 tomcat7 run 我有这个日志 av
  • 数据表自动切换页面

    我正在尝试自动在数据表页面之间切换 但似乎无法使其正常工作 我要么得到一个长时间运行的脚本 如果我尝试添加延迟 则会收到以下错误 table page draw delay 不是函数 下面是我正在使用的代码 document ready f
  • 反斜杠字符的 Bash 参数扩展规则

    我有一个变量 我想使用双反斜杠 替换每次出现的反斜杠 外壳参数扩展 https www gnu org software bash manual html node Shell Parameter Expansion html 最初 我使用
  • 从子目录中的不同文件导入类

    这是我正在使用的结构 directory script py subdir init py myclass01 py myclass02 py 我想要做的是在 script py 中导入定义的类myclass01 py and myclas
  • 展平 pandas 中的嵌套 json

    我收到了 JSON 格式的天气观测数据 我想将其展平 一份完整记录 第一个位置包含 25 个报告 Rep in Period SiteRep DV type Obs Location i 3002 lat 60 749 lon 0 854
  • 有什么方法可以更改 VSTO Outlook 添加中的自定义任务窗格颜色吗?

    有没有办法更改邮件撰写窗口中的自定义任务窗格背景颜色 UPDATE UserControl BackColor 给了我这个结果 但我希望整个自定义任务窗格是白色的 我设置用户控件的代码在这里 public partial class Use
  • 如何使用 C++ ShellExecute 命令在特定页面或指定目的地打开 PDF

    我正在尝试打开一个 pdf在特定的指定目的地使用ShellExecute 但我不知道参数应该如何格式化 我这里使用的参数是pagew 以前有人尝试过这个吗 我找到了几个答案 但它们对我的需要没有帮助 PS 只打开 pdf工作正常 int m
  • “您需要将 Theme.AppCompat 主题(或后代)与设计库一起使用”错误

    每次我都会收到 您需要将 Theme AppCompat 主题 或后代 与设计库一起使用 错误 即使我显然使用的是 AppCompat 主题 后代主题 依赖项 compile com android support appcompat v7
  • 在 C# 中使用私钥对数据进行签名

    我需要使用算法 SHA1RSA Rsa 密钥长度 2048 和 64 基本编码 用一个私钥对一些数据进行签名 我的代码是这样的 string sPayload HttpWebRequest httpWebRequest HttpWebReq
  • 如何从 R 矩阵中随机选择重复的行样本?

    如何从 R 矩阵中随机选择重复的行样本 所以请明确一点 我将从一个 100 行的矩阵开始 我可以选择其中 5 行并创建一个新矩阵 我希望可以选择在更换或不更换的情况下执行此操作 Use sample在行上replace TRUE or re
  • 释放从 C 函数返回的内存

    在 C 中 在释放函数返回的内存时 这是更好的做法 提供一个 析构函数 来封装对 free 的调用 要求用户自己 free 返回的指针 例如 要打开和关闭文件 我们执行以下操作 FILE f fopen blah w fclose f 这是
  • 是否可以阻止 requireJS 自动添加 .js 文件扩展名?

    我正在使用 requireJS 来加载脚本 它有文档中的这个细节 http requirejs org docs api html config 用于模块名称的路径不应包含 js 扩展名 因为路径映射可能是目录 在我的应用程序中 我将所有脚
  • 平铺未在折叠工具栏中居中

    我尝试设置collapsingToolbarLayout setCollapsedTitleGravity Gravity CENTER collapsingToolbarLayout setExpandedTitleGravity Gra
  • 使用php和mysql查询结果获取父级下的所有子节点、孙子节点等

    我一直在试图解决这个问题 但我一无所获 希望有人能来拯救我 我的问题是我正在使用邻接列表数据模型在 mysql 中生成层次结构数据 我可以将表 见下文 检索到一个多维数组中 其中每个项目都有关联数组 我想要做的是 一旦我得到这个数组 我想得
  • Firebase从中间键上下查询数据

    我有一个有日期的数据列表 我通常查询按日期排序的数据 但我遇到的情况是 我需要从中间键来回检索一些数据 我有按日期排序的数据 orderByChild date 像这样 key1 date 2016 07 25 key2 date 2016
  • Body/HTML 元素缩小到比视口小得多

    我正在使我的 WordPress 网站具有响应能力 我正在处理的页面上有两个图像 我想将它们设置为max width100 使它们响应 这是我在我制作的另一个网站上所做的 并且效果很好 然而 我注意到当我在 Chrome 开发工具中缩小页面
  • 仅更改底部导航视图的一个图标的大小(Android)

    我只想更改底部导航视图中使用的 5 个图标中的一个图标 第三个图标 的大小 我想要中心图标像这样大 这是我尝试过的 private fun setReportPainIconSize val bottomNavigationView fin