Android - Высота панели уведомлений от сервиса - PullRequest
3 голосов
/ 15 июня 2010

Приложение, над которым я работаю, - это сервис, который работает в фоновом режиме в Android. Проблема в том, что мне нужно определить высоту панели уведомлений для некоторых функций сервиса.

Я нашел несколько решений для этого, для обычной деятельности - представление внутри действия может определять свою собственную высоту без панели уведомлений, основываясь на проверке фактического размера представления по событию onSizeChanged после того, как оно уже нарисовано. Однако это не применимо к сервису, у которого нет нарисованного физического вида.

Буду очень признателен за любые идеи по поводу размера панели уведомлений на системном уровне, возможно?

Большое спасибо!

Vitaliy

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Может быть, вы сможете извлечь стандартный значок панели уведомлений и измерить его.

Вам придется использовать системный значок, чтобы у вас было больше шансов присутствовать во всех настройках 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
        }
    }
1 голос
/ 15 июня 2010

Сделайте так, чтобы ваш сервис сообщил, какой размер использовать.Высота строки состояния и размер экрана могут измениться во время работы службы.

0 голосов
/ 16 июля 2010

У меня такая же проблема.Мой вид выкладывает изображения в конструкторе вида.Единственный раз, когда вы знаете фактическую высоту просмотра, это метод onMesure, выполнив:

   protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    widthView = MeasureSpec.getSize(widthMeasureSpec);
    heightView = MeasureSpec.getSize(heightMeasureSpec);
   }

Однако я не могу выложить изображения внутри этого метода (анимация изображений будет продолжать вызывать этот метод).

Чтобы узнать фактическую высоту представления, мне нужно сделать:

screenHeight - statusBarHeight

, чтобы я мог использовать это значение в конструкторе представления.

Я не могу поверить, что должно быть так сложно найти решение для такого простого требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...