仅更改底部导航视图的一个图标的大小(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) 的相关文章

  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • 在我的 Android 应用程序中使用 ServerValue.TIMESTAMP

    我读过很多相关的 stackoverflow 问题 ServerValue TIMESTAMP 但我不知道如何在我的应用程序中使用它 我需要获取帖子创建的时间戳 时间戳应该添加到与帖子的 uid 作者等相同的位置 代码片段其中写这篇文章Fi
  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • Gradle 构建错误:内存不足

    当我使用 gradle 构建时 它失败并显示以下信息 OpenJDK 64 Bit Server VM warning INFO os commit memory 0x0000000788800000 89128960 0 failed e
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 如何在 android 中启动“添加联系人”活动

    您能告诉我如何在 Android 中启动 添加联系人 活动吗 谢谢 API 级别 5 及以上解决方案 Add listener so your activity gets called back upon completion of act
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • Android中如何检测WIFI连接何时建立?

    我需要检测何时通过 WIFI 建立网络连接 发送什么广播来确定已建立有效的网络连接 我需要验证是否存在有效的 HTTP 网络连接 我应该监听什么以及需要进行哪些额外测试才能知道是否存在有效连接 您可以注册一个BroadcastReceive
  • 在选项卡上保存数据

    我有 3 个选项卡 每个选项卡都有一个单独的活动 我想在用户单击任一选项卡上的 保存 时保存数据 有几个选项可供选择 共享首选项 全局变量或将对象保存在上下文中 编辑 我必须保存图像和文本字段 Android 共享首选项 https sta
  • 使用 Android Studio 进行调试永远停留在“等待调试器”状态

    UPDATE The supposed重复是一个关于陷入 等待调试器 执行时Run 而这个问题就陷入了 等待调试器 执行时Debug 产生问题的步骤不同 解决方案也不同 每当我尝试使用Android Studio的调试功能时 运行状态总是停
  • 来自相机的 MediaCodec 视频流方向和颜色错误

    我正在尝试流式传输视频捕获直接从相机适用于 Android 设备 到目前为止 我已经能够从 Android 相机捕获每一帧预览帧 byte data Camera camera 函数 对数据进行编码 然后成功解码数据并显示到表面 我用的是安
  • 如何从android中的外部存储中获取所选文件的文件路径?

    我在选择文件的文件路径时遇到问题 我搜索了整个堆栈溢出 但问题没有解决 从设备中选择文件的代码如下所示 Intent intent new Intent Intent ACTION GET CONTENT intent setType in
  • Android 纹理仅显示纯色

    我正在尝试在四边形上显示单个纹理 我有一个可用的 VertexObject 它可以很好地绘制一个正方形 或任何几何对象 现在我尝试扩展它来处理纹理 但纹理不起作用 我只看到一种纯色的四边形 坐标数据位于 arrayList 中 the ve
  • 如何使用应用程序接口将蓝牙套接字传递给另一个活动

    因此 根据我收集的信息 套接字连接既不可序列化 也不可分割 但我需要将蓝牙连接传递给另一个活动 我不想作为中间人编写服务 所以请不要将此作为解决方案发布 我听说有一种方法可以使用自定义应用程序接口来传递这些类型的对象 但我一生都找不到这样的
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 剪切评级栏中的图像

    我制作了自己的评级栏 花朵图像有 4 种尺寸 xdpi hdpi 等 从 24px24px 到 64x64px
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • R.java是手动修改的!恢复到生成的版本

    我在布局中添加了一个 xml 文件 之后这个错误就来了 但问题是我还没有接触过 R java 文件 现在 在我的新活动中 我要将其内容视图设置为我新创建的 xml 文件 但是当我执行 R layout 时 新创建的 xml 不会出现在建议中
  • 将焦距(以毫米为单位)转换为像素 - Android

    在 Android 中 我当前正在访问camera s焦距通过使用getFocalLength in Camera1 Camera2不是一个选择 我正在尝试完全填充当前的计算 focal length pix focal length m

随机推荐

  • 从同级目录导入

    我有一个名为 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