首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ActionBar 標題與 Logo 同時顯示閃爍問題解決

     編輯:程式設計綜合問答

問題現象

使用 ActionBarSherlock 設定 setDisplayShowTitleEnabled(false) 隱藏標題,但啟動瞬間標題與 Logo 同時顯示,造成視覺閃爍。

原因分析

在 onCreate() 中以代碼設定 ActionBar 屬性時,View 已開始繪製,屬性變更會觸發重繪,造成短暫閃爍。

解決方案:主題樣式預先設定 (推薦)

在 styles.xml 定義主題,於 `AndroidManifest.xml` 套用,Activity 啟動前即生效,無閃爍。

styles.xml



    
    

    
    

AndroidManifest.xml



    

Activity 代碼簡化


public class MainActivity extends SherlockActivity {
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_fragment);
        // 無需再設定 ActionBar 屬性,主題已處理
    }
}

替代方案:代碼設定但延遲執行 (不推薦)


// 若必須動態切換,可在 onCreate 之後用 Handler 延遲
new Handler().post(() -> {
    ActionBar ab = getSupportActionBar();
    ab.setDisplayShowTitleEnabled(false);
    ab.setDisplayUseLogoEnabled(true);
});

現代 Toolbar 替代方案 (AppCompat)

ActionBarSherlock 已停止維護,新專案建議用 Toolbar + AppCompat:


// styles.xml (NoActionBar 主題)


// XML 佈局
  

// Activity
public class MainActivity extends AppCompatActivity {
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // 已無標題,只顯示 Logo
    }
}

關鍵原則

  1. 靜態主題優於動態代碼:啟動前生效,無閃爍、效能更好
  2. displayOptions 組合:showHome|useLogo 顯示 Logo,不含 showTitle 即隱藏標題
  3. 遷移至 Toolbar:更靈活、支援 Material Design、官方長期支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved