記錄修改安卓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查看和跳轉安卓源代碼,可是依然有不少限制。因此在這裏記錄遇到的困難和解決方法,下次遇到此類問題能夠提升效率,也但願能幫助到和我同樣是初學者的萌新們。

相關文章
相關標籤/搜索