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

#碎碎念 今年七月份本科毕业后入职一家会议平板公司,通过一个一个多月的咸鱼培训轮岗生活,接手了几个小任务,本次记录一下其中一个任务:修改安卓5.0系统浏览器UI。刚接到任务的时候,本觉得是很简单的一个任务,从我以往浅薄的开发经验来看,仅仅是修改UI布局那天然是轻松愉快的事情,可是现实很骨感,经历重重磨难直到今天才最终完成任务。在这里记录一下其中遇到的问题,这些问题有部分在百度谷歌各类博客或者Stack Overflow上都很难找到解决方案,有的部分就根本没答案,或许是因为大牛们以为太简单而不屑于讨论。话很少说,开始记录。 ##1 ActionBar样式修改 在style.xml中找到当前activity应用的theme,而后在theme里添加:android

<item name="android:actionBarStyle">@style/ActionBarStyle</item>

而后本身定义ActionBarStyle,一般在里面设置ActionBar背景。若要设置标题栏高度,能够直接在theme中添加:浏览器

<item name="android:actionBarSize">30dp</item>

##2 PopupMenu样式修改 (1)浏览器的更多按钮是弹出一个菜单列表,默认是用PopupMenu实现。要修改PopupMenu样式,在theme中添加:ide

<item name="android:popupMenuStyle">@style/popmenuStyle</item>

而后自定义popmenuStyle,一般在里面设置背景,须要注意的是,没法在popmenuStyle中修改PopupMenu大小(也许是我没找到),因此若是想更自由地自定义弹出菜单,须要选用PopupWindow。函数

(2)修改PopupMenu上的文字颜色和大小,能够在theme中添加:布局

<item name="android:textAppearanceSmallPopupMenu">@style/popmenuText</item>

而后自定义popmenuText,设置textSize和textColor.code

(3)自定义popmenu的列表下划线,须要在theme中添加:xml

<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查看和跳转安卓源代码,可是依然有不少限制。因此在这里记录遇到的困难和解决方法,下次遇到此类问题能够提升效率,也但愿能帮助到和我同样是初学者的萌新们。

相关文章
相关标签/搜索