Android - 服务的通知栏高度

时间:2010-06-15 11:07:24

标签: android

我正在处理的应用程序是一个在android后台运行的服务。 问题是我需要确定服务的某些功能的通知栏的高度。

我为常规活动找到了许多解决方案 - 活动内部的视图可以在没有通知栏的情况下确定自己的高度,具体取决于在已经绘制之后从onSizeChanged事件中检查其实际视图大小。 但是,这不适用于没有绘制物理视图的服务。

我真的很感激有关在系统级别获取通知栏大小的任何想法吗?

非常感谢!

的Vitaliy

3 个答案:

答案 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

所以我可以在视图的构造函数上使用这个值。

我无法相信为这样一个简单的要求提供解决方案必须如此复杂。