欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

记录修改安卓5.0系统浏览器UI遇到的部分问题

程序员文章站 2023-10-06 14:01:39
碎碎念 今年七月份本科毕业后入职一家会议平板公司,经过一个一个多月的咸鱼培训轮岗生活,接手了几个小任务,本次记录一下其中一个任务:修改安卓5.0系统浏览器UI。刚接到任务的时候,本以为是很简单的一个任务,从我以往浅薄的开发经验来看,仅仅是修改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查看和跳转安卓源代码,但是依然有很多限制。所以在这里记录遇到的困难和解决方法,下次遇到此类问题可以提高效率,也希望能帮助到和我一样是初学者的萌新们。