这是我添加视图的代码:
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" />
但仍有错误,我需要帮助!!
答案 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管理。)
你能描述一下你想做什么吗?通常,您使用Notification和NotificationManager API与状态栏进行互动。