記錄修改安卓5.0系統瀏覽器UI遇到的部分問題

来源:https://www.cnblogs.com/newbyblog/archive/2018/08/31/9566815.html
-Advertisement-
Play Games

碎碎念 今年七月份本科畢業後入職一家會議平板公司,經過一個一個多月的鹹魚培訓輪崗生活,接手了幾個小任務,本次記錄一下其中一個任務:修改安卓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查看和跳轉安卓源代碼,但是依然有很多限制。所以在這裡記錄遇到的困難和解決方法,下次遇到此類問題可以提高效率,也希望能幫助到和我一樣是初學者的萌新們。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本節重點: 插入數據 INSERT 更新數據 UPDATE 刪除數據 DELETE 再來回顧一下之前我們練過的一些操作,相信大家都對插入數據、更新數據、刪除數據有了全面的認識。那麼在mysql中其實最重要的不是這三大操作,而是查數據最重要,下節課知曉 ...
  • mysql的埠號預設是3306,初學者可能有時會忘記或者之前修改了預設的埠號,忘記了,或者很多時候我們一臺電腦需要安裝兩個mysql或者想設置一個自己的喜歡的數字,那麼接下來我們來看看如何查看或者修改mysql現有的埠號; 同時點擊或者依次win+R打開運行界面輸入cmd或者在開始菜單的搜索框 ...
  • 之前從來沒有使用過Dbvisualizer軟體,用起來之後發現比mysqlfront不是好一點。之前一直不知道sql語句的自動提示功能,只能一個個單詞輸入,而且不是預設設置。之後在網上找到了怎麼設置,現在找到了記錄一下。 設置自動提示方法: 點擊Tool->Tool Properties->SQL ...
  • MySQL: ERROR 1040: Too many connections”的異常情況,造成這種情況的一種原因是訪問量過高,MySQL伺服器抗不住,這個時候就要考慮增加從伺服器分散讀壓力;另一種原因就是MySQL配置文件中max_connections值過小。首先,我們來查看mysql的最大連接 ...
  • 碎片產生的原因 (1)表的存儲會出現碎片化,每當刪除了一行內容,該段空間就會變為空白、被留空,而在一段時間內的大量刪除操作,會使這種留空的空間變得比存儲列表內容所使用的空間更大; (2)當執行插入操作時,MySQL會嘗試使用空白空間,但如果某個空白空間一直沒有被大小合適的數據占用,仍然無法將其徹底占 ...
  • 大數據的領域非常廣泛,往往使想要開始學習大數據及相關技術的人望而生畏。大數據技術的種類眾多,這同樣使得初學者難以選擇從何處下手。本文將為你開始學習大數據的徵程以及在大數據產業領域找到工作指明道路,提供幫助。 大數據學習QQ群:119599574 如何開始學習大數據? 人們想開始學習大數據的時候,最常 ...
  • 貝塞爾曲線: 貝塞爾曲線於 1962,由法國工程師皮埃爾·貝塞爾所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由 Paul de Casteljau 於 1959 年運用 de Casteljau 演演算法開發,以穩定數值的方法求出貝茲曲線。貝塞爾曲線主要用於二維圖形應用程式中的數 ...
  • 今天在整一個項目,需要利用串口通訊在網上看了好多人的帖子才稍微整齣了一點頭緒。 首先串口代碼就是利用谷歌自己的api,將java代碼放在java/android_serialport_api目錄下,如果你想改變這個報名需要用jni重新生成so文件,在這裡我是直接使用這個包名來簡化工作。 androi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...