不要添加一个操作,而是定义你自己的通知布局,并通过RemoteView连接一个pendingIntent来触发它。 (下面的示例基于Holo外观和感觉,并仍然需要更新为lollipop。 您可以在sdk的android-21 / data / res文件夹中找到所有正确的资源)
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(myService)
.setSmallIcon(R.drawable.notification_icon).setContentTitle("My Title")
.setContentText("Service running in the background");
Intent openIntent = new Intent(MainActivity.this, MainActivity.class);
PendingIntent pOpenIntent = PendingIntent.getActivity(this, 0, openIntent, 0);
mBuilder.setContentIntent(pOpenIntent);
String ACTION_NOTIFICATION_EXITACTIVITY = "com.jmols.example.exitactivity";
Intent exitIntent = new Intent();
exitIntent.setAction(ACTION_NOTIFICATION_EXITACTIVITY);
PendingIntent pExitIntent = PendingIntent.getBroadcast(this, 1, exitIntent, 0);
RemoteViews view = new RemoteViews(getPackageName(), R.layout.notification_discoveryservice);
view.setOnClickPendingIntent(R.id.notification_closebtn_ib, pExitIntent);
mBuilder.setContent(view);
使用通知布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:internal="http://schemas.android.com/apk/prv/res/android"
android:id="@+id/status_bar_latest_event_content"
android:layout_width="match_parent"
android:layout_height="64dp"
internal:layout_maxHeight="64dp"
internal:layout_minHeight="64dp" >
<ImageView
android:id="@+id/notification_icon_iv"
android:layout_width="64dp"
android:layout_height="64dp"
android:padding="10dp"
android:layout_alignParentLeft="true"
android:scaleType="center"
android:src="@drawable/notification_icon"
android:background="#3333B5E5" />
<ImageButton
android:id="@+id/notification_closebtn_ib"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:scaleType="centerInside"
android:src="@drawable/notification_exitbtn"
android:background="@drawable/notification_imagebtn_bg"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
android:gravity="top"
android:minHeight="64dp"
android:layout_toRightOf="@id/notification_icon_iv"
android:layout_toLeftOf="@id/notification_closebtn_ib"
android:orientation="vertical"
android:paddingBottom="2dp"
android:paddingEnd="8dp"
android:paddingTop="2dp" >
<TextView
android:id="@+id/notification_title_tv"
style="@android:style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:ellipsize="marquee"
android:paddingTop="6dp"
android:singleLine="true"
android:text="JMols Service" />
<TextView
android:id="@+id/notification_contenttext_tv"
style="@android:style/TextAppearance.StatusBar.EventContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:ellipsize="marquee"
android:singleLine="true"
android:text="Service running in the background" />
</LinearLayout>
</RelativeLayout>
通知的背景颜色为:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true" android:drawable="@drawable/notification_bg_normal_pressed" />
<item android:state_pressed="false" android:drawable="@drawable/notification_bg_normal" />
</selector>
![notification_bg_normal_pressed.9](https://istack.dev59.com/VlYGh.webp)
通知图像按钮的背景是:
注:该内容涉及IT技术,翻译时需要注意专业术语的准确性和易懂性。
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true" android:drawable="@drawable/notification_imagebtn_bg_normal_pressed" />
<item android:state_pressed="false" android:drawable="@drawable/notification_imagebtn_bg_normal" />
</selector>
![notification_imagebtn_bg_normal_pressed.9.png](https://istack.dev59.com/iZ19S.webp)