我正在处理的应用程序是一个在android后台运行的服务。 问题是我需要确定服务的某些功能的通知栏的高度。
我为常规活动找到了许多解决方案 - 活动内部的视图可以在没有通知栏的情况下确定自己的高度,具体取决于在已经绘制之后从onSizeChanged事件中检查其实际视图大小。 但是,这不适用于没有绘制物理视图的服务。
我真的很感激有关在系统级别获取通知栏大小的任何想法吗?
非常感谢!
的Vitaliy
答案 0 :(得分:1)
让活动告诉您的服务使用正确的尺寸。在服务运行期间,状态栏高度和屏幕大小可能会发生变化。
答案 1 :(得分:1)
也许您可以检索标准通知栏图标并进行衡量。
您必须使用系统图标,以便您有更多机会出现在所有Android自定义设置上(Sense UI,MotoBlur等...)
类似的东西:
Drawable phoneCallIcon = getResources().getDrawable(android.R.drawable.stat_sys_phone_call);
int height = phoneCallIcon.getIntrinsicHeight();
从我的Nexus One运行它可以提供38像素的高度,这是准确的。
对这种“黑客”采取更安全的方法是迭代一些标准通知图标。
就是这样:
int notificationBarResources[] = {
android.R.drawable.stat_sys_phone_call,
android.R.drawable.stat_notify_call_mute,
android.R.drawable.stat_notify_sdcard,
android.R.drawable.stat_notify_sync,
android.R.drawable.stat_notify_missed_call,
android.R.drawable.stat_sys_headset,
android.R.drawable.stat_sys_warning };
int notificationBarHeight = -1;
for (int i = 0; i < notificationBarResources.length; i++) {
try {
Drawable phoneCallIcon = getResources().getDrawable(
android.R.drawable.stat_sys_phone_call);
if ((notificationBarHeight = phoneCallIcon.getIntrinsicHeight()) != -1) {
break;
}
} catch (Resources.NotFoundException e) {
// Nothing to do
}
}
答案 2 :(得分:0)
我有同样的问题。我的视图在视图构造函数中展示了图像。只有通过执行以下操作才能知道实际视图高度是onMesure方法:
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
widthView = MeasureSpec.getSize(widthMeasureSpec);
heightView = MeasureSpec.getSize(heightMeasureSpec);
}
但是我无法在此方法中布置图像(图像的动画将继续调用此方法)。
要知道我需要做的视图的实际高度:
screenHeight - statusBarHeight
所以我可以在视图的构造函数上使用这个值。
我无法相信为这样一个简单的要求提供解决方案必须如此复杂。