0

这是我添加视图的代码:

        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 manifast中添加了权限

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

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

4

3 回答 3

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"

希望有帮助。在我的情况下,我只需要用半透明的黄色或绿色为状态栏着色,以表明用户当前正在通话中

于 2014-06-05T21:46:53.110 回答
0

好的,这应该工作:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
于 2012-11-29T19:45:09.580 回答
0

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

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

于 2012-12-05T04:44:57.940 回答