package com.gh.base; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; import com.gh.gamecenter.R; import com.readystatesoftware.systembartint.SystemBarTintManager; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Created by csheng on 15-10-12. */ abstract class BaseAppCompatToolBarActivity extends BaseAppCompatActivity implements ToolbarController { private Toolbar mToolbar; private SystemBarTintManager mTintManager; // TODO 获取沉浸栏管理,要进行版本判断或者判断是否为空 protected SystemBarTintManager getTintManager() { return mTintManager; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initToolbar(); // Util_Window.initStatusBarColor(getWindow(), ContextCompat.getColor(this, R.color.theme)); initStatusBar(); } private void initToolbar() { mToolbar = (Toolbar) findViewById(R.id.toolbar_navigation); if (mToolbar != null) { mToolbar.setTitle(""); setSupportActionBar(mToolbar); } } private void initStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { setTranslucentStatus(true); mTintManager = new SystemBarTintManager(this); mTintManager.setStatusBarTintEnabled(true); // mTintManager.setNavigationBarTintEnabled(true); if (Build.MANUFACTURER.equals("Meizu") || Build.MANUFACTURER.equals("Xiaomi")) { mTintManager.setStatusBarTintColor(Color.WHITE); } else { mTintManager.setStatusBarTintColor(Color.BLACK); } switch (Build.MANUFACTURER) { case "Meizu": try { Window window = getWindow(); if (window != null) { WindowManager.LayoutParams lp = window.getAttributes(); Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON"); Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags"); darkFlag.setAccessible(true); meizuFlags.setAccessible(true); int bit = darkFlag.getInt(null); int value = meizuFlags.getInt(lp); value |= bit; meizuFlags.setInt(lp, value); window.setAttributes(lp); } } catch (Exception e) { e.printStackTrace(); } break; case "Xiaomi": try { Window window = getWindow(); if (window != null) { Class clazz = window.getClass(); Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams"); Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); int darkModeFlag = field.getInt(layoutParams); Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class); extraFlagField.invoke(window, darkModeFlag, darkModeFlag); } } catch (Exception e) { e.printStackTrace(); } break; default: break; } } } protected void setTranslucentStatus(boolean status) { Window window = getWindow(); WindowManager.LayoutParams winParams = window.getAttributes(); final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; if (status) { winParams.flags |= bits; } else { winParams.flags &= ~bits; } window.setAttributes(winParams); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: return onNavigationIconClicked(); } return super.onOptionsItemSelected(item); } protected abstract boolean onNavigationIconClicked(); @Override public void setNavigationTitle(int res) { mToolbar.setTitle(res); } @Override public void setNavigationTitle(CharSequence res) { mToolbar.setTitle(res); } @Override public Toolbar getToolBar() { return mToolbar; } }