Android—設定沉浸式狀態列
阿新 • • 發佈:2018-12-13
public class MainActivity extends AppCompatActivity { private ViewGroup title_bar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); Toast.makeText(this,"MainActivity...",Toast.LENGTH_SHORT).show(); //當系統版本為4.4或者4.4以上時可以使用沉浸式狀態列 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明狀態列 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明導航欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } setStatusBar(); } /** * 設定沉浸式狀態列 */ protected void setStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { title_bar = (ViewGroup) findViewById(R.id.bar_layout); final int statusHeight = getStatusBarHeight(); title_bar.post(new Runnable() { @Override public void run() { int titleHeight = title_bar.getHeight(); android.widget.RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) title_bar.getLayoutParams(); params.height = statusHeight + titleHeight; title_bar.setLayoutParams(params); } }); } } /** * 獲取狀態列的高度 * @return */ protected int getStatusBarHeight(){ try { Class<?> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); }catch(Exception e){ e.printStackTrace(); } return 0; } }