Android如何给无法更改继承关系的Activity更换ActionBar(setContentView方法实战)

前言:

通常我们有时候会直接使用ADT工具直接新建一个Activity页,而这个Activity我们又无法更改它的父类,那遇到这种情况该如何处理呢?其实很简单,好,看如何来解决这个问题:

先来看看这个问题出现的情况,我们以SettingsActivity举例:


上图是SettingActivity的继承关系,在PreferenceActivity的内部被引用了一些internal包内的文件,普通情况下我们是无法访问这些文件的,所以我们不能通过复制ListActivity、PreferenceActivity中源代码的方式来为ListActivity更改它的父类(这里我为什么要说更改父类呢,在一般情况下,我们的项目中是有一个通用的ActionBarActivity的,通过继承它便可以自动添加ActionBar到Activity中),所以这样情况下我们就需要在SettingActivity的布局与根布局中间嵌套一层ViewGroup了,就像下面这样:


这个图可能有些丑,我来描述一下是什么情况:

我们通常在Activity中使用setContentView方法会将我们的布局文件添加到mContentRoot这个ViewGroup中去,现在呢,我们想办法把在原来的自定义布局与mContentRoot中见嵌套一个线性布局,并且线性布局中间包含我们的自定义ActionBar,这样就可以实现我们的添加ActionBar的功能。

下面看一下自动生成的与我们处理之后的效果:


左边是我通过ADT工具直接生成的SettingsActivity界面,由于我的Application设置的主题是没有ActionBar的,所以,这里没有显示系统提供的ActionBar,我想大家都明白的。

右边这张图就是我们实现之后的效果,是不是挺赞的,来看看是如何实现的:

我们在SettingsActivity中实现了如下代码:

	@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setupActionBar();}/*** Set up the {@link android.app.ActionBar}, if the API is available.*/@TargetApi(Build.VERSION_CODES.HONEYCOMB)private void setupActionBar() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {// Show the Up button in the action bar.try {Field mContentParentField = getWindow().getClass().getDeclaredField("mContentParent");mContentParentField.setAccessible(true);Object mContentParent = mContentParentField.get(getWindow());if (mContentParent instanceof ViewGroup) {LinearLayout ll = new LinearLayout(this);ll.setOrientation(LinearLayout.VERTICAL);ll.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));LayoutInflater.from(this).inflate(R.layout.custom_action_bar_layout, ll);ViewGroup temp = (ViewGroup) mContentParent;int childCount = temp.getChildCount();for (int i = 0; i < childCount; i++) {View view = temp.getChildAt(i);temp.removeView(view);ll.addView(view);}setContentView(ll);}} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();}}}

这里的意思就是把mContentParent中的内容遍历出来,然后添加到新的容器ll当中,当然在ll创建之后就添加了自定义ActionBar,最后再通过setContentView方法将我们新布局设置进去就可以了,快来试试吧。

有疑问或者看不懂、看不明白的请留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 基于属性embeddings的跨图谱实体对齐

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;AAAI 2019链接&#xff1a;https://aaai.org/ojs/index.php/AAAI/article/view/3798跨图谱实体对齐任务的目标是从两个不同知识图谱中找出同一 real-world 实体&a…

LeetCode 771. 宝石与石头(哈希)

文章目录1. 题目信息2. 解题1. 题目信息 给定字符串J 代表石头中宝石的类型&#xff0c;和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型&#xff0c;你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复&#xff0c;J 和 S中的所有字符都是字母…

开启NLP新时代的BERT模型,真的好上手吗?

都说BERT模型开启了NLP的新时代&#xff0c;更有“BERT在手&#xff0c;天下我有”的传说&#xff0c;它解决了很多NLP的难题&#xff1a;1、BERT让低成本地训练超大规模语料成为可能&#xff1b;2、BERT能够联合神经网络所有层中的上下文来进行训练&#xff0c;实现更精准的文…

YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介

原文链接&#xff1a; https://zhuanlan.zhihu.com/p/136382095 YOLO系列&#xff1a;YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介YOLO系列是基于深度学习的回归方法。RCNN&#xff0c; Fast-RCNN&#xff0c;Faster-RCNN是基于深度学习的分类方法。YOLO官网&#xff1a;https://g…

一站式机器学习平台建设实践

本文根据美团配送资深技术专家郑艳伟在2019 SACC&#xff08;中国系统架构师大会&#xff09;上的演讲内容整理而成&#xff0c;主要介绍了美团配送技术团队在建设一站式机器学习平台过程中的经验总结和探索&#xff0c;希望对从事此领域的同学有所帮助。 0. 写在前面 AI是目前…

LeetCode 535. TinyURL 的加密与解密(哈希)

文章目录1. 题目信息2. 哈希解题1. 题目信息 TinyURL是一种URL简化服务&#xff0c; 比如&#xff1a;当你输入一个URL https://leetcode.com/problems/design-tinyurl 时&#xff0c;它将返回一个简化的URL http://tinyurl.com/4e9iAk. 要求&#xff1a;设计一个 TinyURL 的…

论文浅尝 | Doc2EDAG:一种针对中文金融事件抽取的端到端文档级框架

论文笔记整理&#xff1a;叶宏彬&#xff0c;浙江大学博士生&#xff0c;研究方向为知识图谱、自然语言处理。链接&#xff1a;https://arxiv.org/pdf/1904.07535.pdf背景大多数现有的事件提取&#xff08;EE&#xff09;方法仅提取句子范围内的事件参数。但是&#xff0c;此类…

NeurIPS'20 | 通过文本压缩,让BERT支持长文本

作者 | wangThr来源 | 知乎这是今年清华大学及阿里巴巴发表在NIPS 2020上的一篇论文《CogLTX: Applying BERT to Long Texts》&#xff0c;介绍了如何优雅地使用bert处理长文本。作者同时开源了不同NLP任务下使用COGLTX的代码&#xff1a;论文题目&#xff1a;CogLTX: Applying…

福利!Android官方网站出现中文版本!

这两天在Android开发者网站上查东西的时候发现有中文的搜索结果&#xff0c;点开结果全是中文的&#xff0c;以后可以畅通无阻的看文档了&#xff0c;快来围观。

自然场景人脸检测技术实践

一、 背景 人脸检测技术是通过人工智能分析的方法自动返回图片中的人脸坐标位置和尺寸大小&#xff0c;是人脸智能分析应用的核心组成部分&#xff0c;具有广泛的学术研究价值和业务应用价值&#xff0c;比如人脸识别、人脸属性分析&#xff08;年龄估计、性别识别、颜值打分和…

LeetCode 257. 二叉树的所有路径(DFS)

文章目录1. 题目2. DFS解题1. 题目 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例:输入:1/ \ 2 3\5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->…

JAVA BIO

JAVA BIO深入剖析1. Java BIO 基本介绍2. Java BIO 工作机制3. 传统BIO编程4. BIO模式下的多发和多收消息5. BIO模式下接收多个客户端6. 伪异步I/O编程7. 基于BIO的文件上传8. Java BIO模式下的端口转发9. 基于BIO模式下的即时通信功能清单简单说明项目启动与演示1. Java BIO 基…

速览EMNLP 2020上录取的知识图谱相关论文

文 | 泽宇源 | 知乎前不久&#xff0c;自然语言处理领域三大顶会之一的 EMNLP 2020 发布了论文录取的结果。在EMNLP 2020论文正式出版之前&#xff0c;泽宇搜集了目前Arxiv上已经发布出来的录取在EMNLP 2020上所有和知识图谱相关的论文&#xff0c;下面我们就一起来一睹为快。1…

技术动态 | 数据库研究者视角下的知识图谱研究

本文转载自公众号&#xff1a;图谱学苑 。本次讲解的是数据库领域的三大会&#xff08;SIGMOD、VLDB、ICDE&#xff09;近两年关于图数据的研究进展&#xff0c;特别是知识图谱的最新研究。知识图谱是2012年Google为改进其搜索引擎而提出的概念&#xff0c;其本质是一个描述事物…

MultiDex

原文转自&#xff1a;http://coolpers.github.io/multidex/2015/04/13/multidex.html 1.MultiDex的产生背景 当Android系统安装一个应用的时候&#xff0c;有一步是对Dex进行优化&#xff0c;这个过程有一个专门的工具来处理&#xff0c;叫DexOpt。DexOpt的执行过程是在第一次加…

PYTHON得到pdf页数、遍历当前文件夹

#第一步安装PyPDF2 pip install PyPDF2#第二步导入相应的模块 from PyPDF2 import PdfFileReader#第三步&#xff1a;定义相对应的函数 def get_num_pages(file_path):"""获取文件总页码:param file_path: 文件路径:return:"""reader PdfFileRe…

LeetCode 814. 二叉树剪枝(递归)

文章目录1. 题目2. 递归解题1. 题目 给定二叉树根结点 root &#xff0c;此外树的每个结点的值要么是 0&#xff0c;要么是 1。 返回移除了所有不包含 1 的子树的原二叉树。 把只包含0的子树删除&#xff08;断开&#xff09; 来源&#xff1a;力扣&#xff08;LeetCode&…

怎样缓解灾难性遗忘?持续学习最新综述三篇

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

美团点评技术年货:900+页电子书,覆盖前端、后台、大数据、算法……

新年将至&#xff0c;年味渐浓。 美团点评技术年货如期而至。 从2013年12月4日发布第一篇文章&#xff0c;一直到今天&#xff0c;美团技术团队官方博客已经走过了6个春秋。 截止目前&#xff0c;我们共发布376篇技术文章&#xff0c;微信公众号&#xff08;meituantech&#x…

论文浅尝 | 基于用户反馈的交互式自然语言回答系统提升机制

本文转载自公众号&#xff1a;图谱学苑。今天介绍的工作是An Interactive Mechanism to Improve Question Answering Systems via Feedback&#xff0c;作者&#xff1a;张欣勃&#xff0c;邹磊&#xff0c;胡森&#xff0c;被CIKM2019接收。本文是一篇与知识库自然语言问答系统…