android沉浸式状态栏和虚拟按键

在java代码中:

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		<span style="color:#FF0000;">requestWindowFeature(Window.FEATURE_NO_TITLE);//设置没有titlebar</span>
		setContentView(R.layout.activity_main);
		set();
		initView();
	}

	private void set() {
		<span style="color:#FF0000;">if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
			// 透明状态栏
			getWindow().addFlags(
					WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
			// 透明导航栏
			getWindow().addFlags(
					WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
		}</span>
	}

	private void initView() {

	}

}

直接调用上面2行代码可以透明,但是你会发现你的 view 跑到 actionbar 上面去了,很明显 google 的意图是使你的 view 可以占据整个屏幕,然后 状态栏和导航栏 透明覆盖在上面很明显这样不可行。
那有没有办法使你的 view 保持原来大小呢?
有,你需要在这个 activity 的 layout xml 文件添加两个属性

在xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000"
   <span style="color:#FF0000;"> android:clipToPadding="true"
    android:fitsSystemWindows="true"</span>
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="15dp"
        android:paddingTop="15dp"
        android:text="@string/hello_world"
        android:textColor="#FFFFFF"
        android:textSize="18sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF" />

</LinearLayout>


结果:

4.4之前的设备上效果

4.4之后的设备上效果


另一种方式是使用系统自带的titlebar,这样的话用上面的就不是那么方便了,推荐下面的帖子

http://segmentfault.com/a/1190000000403651

1. 设置主题

<style name="Theme.Timetodo" parent="@android:style/Theme.Holo.Light">
    <!-- translucent system bars -->
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

请输入图片描述
添加了这两个属性之后 就是是这个效果了 可以看到 listview已经被顶到上面去了 不知道是不是bug 查了下资料 目前的解决办法好像都是给layout设置padding来解决

2.设置颜色和设置padding

private void initSystemBar() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        setTranslucentStatus(true);
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setStatusBarTintResource(R.color.actionbar_bg);
        SystemBarConfig config = tintManager.getConfig();
        listViewDrawer.setPadding(0, config.getPixelInsetTop(true), 0, config.getPixelInsetBottom());
    }
}

3.最终效果

请输入图片描述

参考资料:

http://mindofaandroiddev.wordpress.com/2013/12/28/making-the-status-bar-and-navigation-bar-transparent-with-a-listview-on-android-4-4-kitkat/

http://stackoverflow.com/questions/20781014/translucent-system-bars-and-content-margin-in-kitkat


if (android.os.Build.VERSION.SDK_INT > 18) {

   Window window = getWindow();
   window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
     WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

   window.setFlags(
     WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
     WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
   // 创建状态栏的管理实例
   SystemBarTintManager tintManager = new SystemBarTintManager(this);
   // 激活状态栏设置
   tintManager.setStatusBarTintEnabled(true);
   // 激活导航栏设置
   tintManager.setNavigationBarTintEnabled(true);
   // 设置一个颜色给系统栏
   tintManager.setTintColor(Color.parseColor("#FFFF6666"));
  }


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Android 沉浸状态栏指的是在应用中隐藏系统状态栏,使应用的界面能够占据整个屏幕空间,提供更加沉浸的使用体验。在 Android 4.4 KitKat(API 级别 19)及以上版本中,引入了沉浸状态栏的支持。 要实现沉浸状态栏,可以按照以下步骤进行操作: 1. 在 AndroidManifest.xml 文件中,为对应的 Activity 设置 `android:theme` 属性为 `@style/Theme.AppCompat.NoActionBar` 或者其他无 ActionBar 特性的主题。 2. 在对应 Activity 的 `onCreate` 方法中添加以下代码来隐藏系统状态栏: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } ``` 3. 如果你想要在状态栏下方留出一定的空间,可以设置 paddingTop,例如: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { int statusBarHeight = getStatusBarHeight(); View view = findViewById(R.id.your_view_id); view.setPadding(0, statusBarHeight, 0, 0); } private int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } ``` 这样就可以实现 Android 沉浸状态栏的效果。需要注意的是,沉浸状态栏可能会导致一些 UI 布局的问题,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值