2010-06-22 1 views
4

Я хотел бы знать, как отключить эффект выделения, когда пользователь нажимает уведомление в строке состояния, и, кроме того, я хотел бы разрешить пользователю напрямую взаимодействовать с RemoteView, который я разместил в уведомлении с помощью нажатия кнопки.Выполнение интерактивного уведомления в строке состояния (Android)

Я знаю, что это может быть сделано, поскольку у HTC Sense есть постоянное уведомление во время разговора, который достиг вышеперечисленных целей.

Пожалуйста, дайте мне знать, если у вас есть идеи, в частности, как установить OnClickListener для представления, вложенного в мой RemoteView?

ответ

2

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

Например, если ваш пользовательский макет выглядит так.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/layout_root" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
    <ImageView android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:src="@drawable/button"/> 
    <TextView android:id="@+id/text" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:text="Some Text" /> 
</LinearLayout> 

Добавить do_nothing намерения к layout_root,

RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.yourlayout); 
notification.contentView = contentView; 

PendingIntent peClick = PendingIntent.getBroadcast(this, 0, new Intent("com.BUTTON_CLICK"), 0); 
contentView.setOnClickPendingIntent(R.id.button, peClick); 
PendingIntent peNothing = PendingIntent.getBroadcast(this, 0, new Intent("com.DO_NOTHING"), 0); 
contentView.setOnClickPendingIntent(R.id.layout_root, peNothing); 

BTW, HTC имеет возможность изменять андроид таким образом, что нормальный разработчик не может, так что это не всегда хорошо, чтобы использовать их материал как пример того, что возможно.

0

Я все еще работаю над созданием некоторой подобной работы с кодом, но до сих пор мое наблюдение заключается в том, что разные версии Android обрабатывают вещи по-разному. на Ice Cream Sandwich, используя setOnClickPendingIntent для отдельных элементов в макете. Однако в более ранних версиях Android сначала запускается contentIntent для уведомления, и намерение кнопки никогда не срабатывает. Возможно, что-то в этом роде, но я еще не нашел его. Предоставление намерения «ничего не делать» для содержимого контента уведомления не помогает, поскольку оно все еще захватывает клик.

+0

fyi- HoneyComb устанавливает разделение. С HoneyComb on они работают. – Falcon