android如何阻止app_name在標題列中閃現

來源:互聯網
上載者:User

常見自訂titlebar的方法是在values檔案夾中建立一個我們自己的titlebar主題,例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TitlebarBackgroundStyle">
        <item name="android:background">@drawable/titlebar</item>
    </style>
    <style name="Theme.MyCustomTheme" parent="android:Theme">
        <item name="android:windowTitleBackgroundStyle">@style/TitlebarBackgroundStyle</item>
        <item name="android:windowTitleSize">45dp</item>
    </style>
</resources>

然後在manifest檔案中為activity添加自訂佈景主題, 

  <activity android:name=".MyTitleBar"
                  android:label="@string/app_name"
                  android:theme="@style/Theme.MyCustomTheme" //注意添加與此

這樣就基本上完成了自訂titlebar。
聲明無標題列的方法更簡單就是直接在activity中添加語句

requestWindowFeature(Window.FEATURE_NO_TITLE); 

但是無論是通過上面代碼定義無標題列的activity,還是通過自訂佈景主題重寫titlebar,app首次載入時,系統總是會閃現一下app_name,然後才會運行我們定義的titlebar行為。這是一個令人詭異的行為。那麼怎麼去除app_name呢?

首先我們來看一下android運行app的基本原理:在系統運行一個application時,為了儘快響應使用者,android首先會給使用者 呈現一個app的“preview”視窗,這個介面甚至早於應用的實際進程。這個預覽“preview”視窗中的資訊就是從app的manifest檔案 中獲得的,所以一般app運行時總會顯示一個具有app_name的titlebar,而不論我們在程式中如何定義我們的titlebar。所以解決的辦 法來了。

首先我們可以在app的manifest檔案中,給我們的main activity添加無標題列的主題

android:theme="@android:style/Theme.NoTitleBar" 

聲明我們的app根本不需要titlebar,這樣app首次載入便不會閃現一下帶有app_name的titlebar了。這比

requestWindowFeature(Window.FEATURE_NO_TITLE);

好使得多。但是問題來了,如果我還想要app呈現我自訂的標題列怎麼辦呢?

解決的辦法是在需要自訂titlebar的activity中通過

setTheme(android.R.style.Theme); 

聲明回標題列。
需要注意的是setTheme(android.R.style.Theme);語句需要放在oncreat()語句的最前面否則會報錯的。例如:

  1. protected void onCreate(Bundle savedInstanceState) {  
  2.         // TODO Auto-generated method stub  
  3.         setTheme(R.style.MyCustomTheme);//注意這一句的位置  
  4.         super.onCreate(savedInstanceState);  
  5.         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);        
  6.         setContentView(R.layout.progressbar_test);  
  7.         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,      // 注意順序  
  8.                 R.layout.title);  風之境地 java-javascript 蘑菇街女裝

這樣運行期間系統就會直接運行我們定義的標題列,而不是先短暫的呈現app_name,再呈現我們的標題列特徵。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.