记录修改安卓5.0系统浏览器UI遇到的部分问题
碎碎念
今年七月份本科毕业后入职一家会议平板公司,经过一个一个多月的咸鱼培训轮岗生活,接手了几个小任务,本次记录一下其中一个任务:修改安卓5.0系统浏览器UI。刚接到任务的时候,本以为是很简单的一个任务,从我以往浅薄的开发经验来看,仅仅是修改UI布局那自然是轻松愉快的事情,但是现实很骨感,经历重重磨难直到今天才最终完成任务。在这里记录一下其中遇到的问题,这些问题有部分在百度谷歌各种博客或者Stack Overflow上都很难找到解决方案,有的部分就根本没答案,或许是由于大牛们觉得太简单而不屑于讨论。话不多说,开始记录。
1 ActionBar样式修改
在style.xml中找到当前activity应用的theme,然后在theme里添加:
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
然后自己定义ActionBarStyle,通常在里面设置ActionBar背景。若要设置标题栏高度,可以直接在theme中添加:
<item name="android:actionBarSize">30dp</item>
2 PopupMenu样式修改
(1)浏览器的更多按钮是弹出一个菜单列表,默认是用PopupMenu实现。要修改PopupMenu样式,在theme中添加:
<item name="android:popupMenuStyle">@style/popmenuStyle</item>
然后自定义popmenuStyle,通常在里面设置背景,需要注意的是,无法在popmenuStyle中修改PopupMenu大小(也许是我没找到),所以如果想更自由地自定义弹出菜单,需要选用PopupWindow。
(2)修改PopupMenu上的文字颜色和大小,可以在theme中添加:
<item name="android:textAppearanceSmallPopupMenu">@style/popmenuText</item>
然后自定义popmenuText,设置textSize和textColor.
(3)自定义popmenu的列表下划线,需要在theme中添加:
<item name="android:dropDownListViewStyle">@style/popmenuDivider</item>
然后自定义popmenuDivider:
<style name="popmenuDivider">
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
<item name="android:divider">@drawable/item_divider</item>
<item name="android:dividerHeight">0.25dp</item>
</style>
3 首选项的修改
几乎所有应用都离不开首选项模块的编写,安卓给我们提供了preference让我们能更方便快捷地完成需求。
(1)为了对preference默认的listView进行修改,例如设置下划线,需要在代码中获取它。获取preference的listView可以在继承preferenceFragment的子类中重写onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=super.onCreateView(inflater,container,savedInstanceState);
ListView listView=(ListView)view.findViewById(android.R.id.list);
listView.setDivider(null);
return view;
}
(2)想要设置preference弹出窗口的大小,可以继承需要修改的preference,然后在子类中重写showDialog。例如需要修改listPreference的弹出窗口大小,则新建一个子类继承listPreference,然后在子类中重写showDialog:
@Override
protected void showDialog(Bundle state) {
super.showDialog(state);
Window window =getDialog().getWindow();
window.setBackgroundDrawableResource(R.drawable.menu_list_bg);
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = (int)(getDialog().getContext().getResources().getDimension(R.dimen.dialog_width));
window.setAttributes(layoutParams);
}
其中getDialog()是listPreference里提供dialog对象的函数。
(3)部分需求下不应该在preference的listView里每一项中都添加下划线,因此不应该在代码中直接获取listView并且setDivider,我的方式是在xml的PreferenceScreen里再添加PreferenceScreen,并且在这个PreferenceScreen里设置layout作为下划线,和在普通布局中用view做下划线同理。
结束语
以上记录的都是搜索资料较少或者没有的内容,也许大牛们都没有这样的需求,或者觉得太简单,所以这方面的资料很少。但是这让我经历了很多困难,翻遍framework里的资源和代码,才勉强完成任务。而且由于是安卓系统源码,还无法像平时用android studio一样随意跳转,只能用source insight缓慢查找。后来研究了一下如何用android studio查看和跳转安卓源代码,但是依然有很多限制。所以在这里记录遇到的困难和解决方法,下次遇到此类问题可以提高效率,也希望能帮助到和我一样是初学者的萌新们。
记录修改安卓5.0系统浏览器UI遇到的部分问题的更多相关文章
- 安卓5.0系统怎么无Root激活XPOSED框架的方法
在大多团队的引流或业务操作中,基本上都需要使用安卓的强大Xposed框架,几天前,我们团队买来了一批新的安卓5.0系统,基本上都都是基于7.0以上系统,基本上都不能够获得Root的su权限,纵然一些能 ...
- 安卓9.0系统机器(亲测有效)激活Xposed框架的步骤
对于喜欢玩手机的哥们来说,经常会用到xposed框架及其种类繁多功能无敌的模块,对于5.0以下的系统版本,只要手机能获得root权限,安装和激活xposed框架是非常简便的,但随着系统版本的持续更新, ...
- iTOP-i.MX6Q开发板支持安卓Android6.0系统
迅为IMX6开发板: Android4.4/6.0系统 Linux + Qt5.7系统 Ubuntu12.04系统 部分案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 核心板兼容 ...
- Android6.0系统添加那些新特性
北京时间9月30日凌晨在美国旧金山举行2015年秋季新品公布会.在公布会上代号为"Marshmallow(棉花糖)"的安卓6.0系统正式推出.新系统的总体设计风格依旧保持扁 ...
- 安卓4.0以上系统怎么不用root激活XPOSED框架的方法
在大多单位的引流或业务操作中,基本上都需要使用安卓的高端技术Xposed框架,近期,我们单位购买了一批新的安卓4.0以上系统,基本上都都是基于7.0以上版本,基本上都不能够刷入root超级权限,即便是 ...
- 开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
在使用了pytest完成了一个系统的UI自动化后,因为系统的前端框架,是 基于VUE写的,这就让我编写脚本的时候踩了些坑. 无法用JS 修改标签属性,从而进行的操作 比如上传图片,我们的上传是这样子的 ...
- 从0系统学Android--3.1编写UI界面
从0系统学Android--3.1编写UI界面 本系列文章目录:更多精品文章分类 本系列持续更新中.... 界面设计和功能开发同样重要,界面美观的应用程序不仅可以大大增加用户粘性,还能帮我们吸引到更多 ...
- 虚拟机安装中标麒麟桌面版7.0系统 + 升级Firefox浏览器
背景 由于公司业务(政府项目)需要走国产化路线,需要把原来已有的产品在国产的系统进行测试.目前选择的是中标麒麟系统,这是一款国产系统,界面 UI 和 window 类似,系统内核使用的是 Linux ...
- 考试宝典-真题园安卓AppV2.1.0新版发布啦,全新界面,全新体验,全面适配Android 5.0&6.0系统!
真题园移动客户端是真题园网 http://www.zhentiyuan.com 旗下的一款学习考试应用App. 1.全新适配Android5.0.6.0系统,重新优化架构网络通信模块. 2.全新清爽U ...
随机推荐
- MySQL 组提交(group commit)
目录 前言 改进 原理 实现 参数 注意 前言 操作系统使用页面缓存来填补内存和磁盘访问的差距 对磁盘文件的写入会先写入道页面缓存中 由操作系统来决定何时将修改过的脏页刷新到磁盘 确保修改已经持久化到 ...
- vue 自学笔记(4): 样式绑定与条件渲染
一:对象绑定 Vue 对于页面的样式加载也有独特的方式,按照 Vue 提供的方式,我们可以轻松的控制它们的呈现. 假使我们要实现点击 div 变色 Vue 提供的样式方案的本质是对元素节点进行属性的绑 ...
- DFSMN结构快速解读
参考文献如下: (1) Deep Feed-Forward Sequential Memory Networks for Speech Synthesis (2) Deep FSMN for Larg ...
- nohup后台执行
由于使用nohup时,会自动将输出写入nohup.out文件中,如果文件很大的话,nohup.out就会不停的增大,这是我们不希望看到的,因此,可以利用/dev/null来解决这个问题. nohup ...
- hive中的子查询改join操作(转)
这些子查询在oracle和mysql等数据库中都能执行,但是在hive中却不支持,但是我们可以把这些查询语句改为join操作: -- 1.子查询 select * from A a where a.u ...
- 使用jdk的keytool 生成CA证书的方法
一.CA证书生成设置总共分为以下5步: 步骤: 1.根据java的keytool生成CA根证书,放在服务器 2.根据服务器CA根证书导出客户端证书 3.tomcat增加SSL配置 4.客户端IE浏览器 ...
- Firefox37.0.1+selenium 2.53+python3.6打开浏览器时报错NameError: name 'basestring' is not defined
环境:Win7 Firefox浏览器版本37.0.1 Python36 Selenium2.53.0 在Pycharm里执行以下3行脚本: from selenium i ...
- rfc2818 --- HTTP Over TLS
协议链接 本协议描述了如何使用TLS来对Internet上的HTTP进行安全加固. 2.1. Connection Initiation(链接初始化) HTTP client同时也作为TLS clie ...
- Vue + Element UI 实现权限管理系统 前端篇(十一):第三方图标库
使用第三方图标库 用过Elment的同鞋都知道,Element UI提供的字体图符少之又少,实在是不够用啊,幸好现在有不少丰富的第三方图标库可用,引入也不会很麻烦. Font Awesome Font ...
- Python机器学习笔记:不得不了解的机器学习面试知识点(1)
机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...