Android在状态栏中添加视图

时间:2012-11-28 19:46:58

标签: android notifications statusbar

这是我添加视图的代码:

        LayoutInflater layoutInflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    TextView tv = (TextView) layoutInflater.inflate(R.layout.textview, null);
    final View view = tv;
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, 25,
            WindowManager.LayoutParams.TYPE_STATUS_BAR,
            WindowManager.LayoutParams.FLAG_SCALED
            , PixelFormat.TRANSLUCENT);


    WindowManager wm = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
    wm.addView(view, lp);

但它会给我一个错误:

  

android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@41668948 - 此窗口类型的权限被拒绝

所以我在android showsast中添加权限

  <uses-permission android:name="android.permission.STATUS_BAR" />

但仍有错误,我需要帮助!!

3 个答案:

答案 0 :(得分:4)

为了在状态栏的顶部绘制视图,这是在阅读了如此多的堆栈溢出后对我有用的组合:

1-您需要在您的服务或活动中使用此LayoutParameters的WindowManager:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT, 
    statusBarHeight, 
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |       
    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | 
    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | 
    WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    PixelFormat.TRANSLUCENT);

2-您只需在Android清单上获得此权限:

uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"

希望有所帮助。在我的情况下,我只需要使用半透明的黄色或绿色来标记状态栏,以指示用户当前正在通话中

答案 1 :(得分:0)

好的,这应该有效:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

答案 2 :(得分:0)

从代码段开始,就像您尝试创建新的状态栏窗口一样,这是不可能的。 (有一个状态栏,它由系统UI管理。)

你能描述一下你想做什么吗?通常,您使用NotificationNotificationManager API与状态栏进行互动。