Android 更改通知布局
我反编译了我的系统音乐应用程序(来自Sony Ericsson for Android GB 2.3.7),因为我想更改通知布局。我找到了使用以下代码创建通知的方法:Android 更改通知布局,android,android-layout,android-notifications,Android,Android Layout,Android Notifications,我反编译了我的系统音乐应用程序(来自Sony Ericsson for Android GB 2.3.7),因为我想更改通知布局。我找到了使用以下代码创建通知的方法: private void sendStatusBarNotification(Track paramTrack) { if (paramTrack != null) { NotificationManager localNotificationManager = (NotificationManag
private void sendStatusBarNotification(Track paramTrack)
{
if (paramTrack != null)
{
NotificationManager localNotificationManager = (NotificationManager)this.mContext.getSystemService("notification");
String str = paramTrack.getArtist();
if ((str == null) || (str.equals(this.mContext.getString(2131361954))))
str = this.mContext.getString(2131361798);
Notification localNotification = new Notification(2130837696, paramTrack.getTitle() + " - " + str, System.currentTimeMillis());
localNotification.flags = (0x2 | localNotification.flags);
localNotification.flags = (0x20 | localNotification.flags);
PendingIntent localPendingIntent = PendingIntent.getActivity(this.mContext, 0, new Intent(this.mContext, MusicActivity.class), 268435456);
localNotification.setLatestEventInfo(this.mContext, paramTrack.getTitle(), str, localPendingIntent);
localNotificationManager.notify(0, localNotification);
}
}
我现在的问题是:如何更改通知布局?我想建立一个布局,看起来像原来的android通知布局,但在通知的右边有一个额外的图像。我怎样才能做到这一点呢?如果我们能够获得布局数据,无论是用代码还是xml表示的,那就太好了 尽管如此,我可以说您必须获取图像并将其放入新通知中(2130837696,paramTrack.getTitle()+“-”+str,System.currentTimeMillis())代码>声明
老实说,这就是我所能提供给你的一切。祝你好运 要创建自定义通知布局,请参阅Android API指南。看起来您将要使用该类。首先为通知创建一个xml 自定义通知.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp" >
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp" />
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
style="Custom Notification Title" />
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/title"
style="Custom Notification Text" />
</RelativeLayout>
public class MainActivity extends Activity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, "Custom Notification", when);
NotificationManager mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
contentView.setImageViewResource(R.id.image, R.drawable.ic_launcher);
contentView.setTextViewText(R.id.title, "Custom notification");
contentView.setTextViewText(R.id.text, "This is a custom layout");
notification.contentView = contentView;
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;
notification.flags |= Notification.FLAG_NO_CLEAR; //Do not clear the notification
notification.defaults |= Notification.DEFAULT_LIGHTS; // LED
notification.defaults |= Notification.DEFAULT_VIBRATE; //Vibration
notification.defaults |= Notification.DEFAULT_SOUND; // Sound
mNotificationManager.notify(1, notification);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
希望这东西对你有用
编辑:如果您遇到以下问题,也可以访问
此外,您还可以访问以了解更多信息
编辑2016年4月26日您可以使用NotificationCompat.Builder
创建通知
实例,如下所示:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(icon)
.setContent(contentView)
.setContentTitle("Custom Notification")
.setWhen(when);
...
mNotificationManager.notify(1, notificationBuilder.build());
这里我附上了一个屏幕截图,第一个屏幕包含了文章的标题,当我们点击应用程序名称右侧的向下箭头时,它会导致第二个屏幕截图,这是推送通知的自定义布局。下面是我为我设计的示例布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
card_view:cardCornerRadius="5dp"
card_view:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:background="#80000000"
android:layout_height="wrap_content">
<ImageView
android:src="@mipmap/ic_launcher"
android:layout_width="50dp"
android:layout_height="match_parent"
android:padding="10dp"
android:layout_marginLeft="5dp"
android:background="@null"
android:layout_gravity="center_vertical|center_horizontal"
android:scaleType="centerCrop"/>
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:minHeight="48dp"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:background="@android:color/transparent"
android:textColor="@android:color/white"
tools:text="Test"/>
</LinearLayout>
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:adjustViewBounds="true"
android:contentDescription="@null"
android:scaleType="centerCrop"
android:src="@drawable/placeholder"/>
</LinearLayout>
谢谢你。你会得到赏金,但我可以在一小时内给你;)@没问题,亲爱的。我根本没帮你拿赏金。我很高兴我的解决方案对你有用,就是这样……:)我喜欢用我所知道的任何东西来帮助人们。快乐编码@shree202给了我一个建议。我使用RemoteView构建了一个通知大视图,以控制播放/暂停,如以下链接(stackoverflow.com/questions/14508369/…),所有这些都是正确的,但当我单击设备后退按钮并从应用程序中退出时,单击事件(播放/暂停/前进/关闭)按钮不起作用。请帮助我。如何使用此方法每10秒更新一次TextView?@IgorGanapolsky感谢您指出旧代码。主席先生,我已更新答案。如果我错了,请随时纠正我。太棒了,马恩,帮了很多忙。
public static void createNotification(String title, String body,String image_url, Context context, int notificationsId, String single_id) {
Intent notificationIntent;
long when = System.currentTimeMillis();
int id = (int) System.currentTimeMillis();
Bitmap bitmap = getBitmapFromURL(image_url);
NotificationCompat.BigPictureStyle notifystyle = new NotificationCompat.BigPictureStyle();
notifystyle.bigPicture(bitmap);
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewBitmap(R.id.image, bitmap);
contentView.setTextViewText(R.id.title, body);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setStyle(notifystyle)
.setCustomBigContentView(contentView)
.setContentText(body);
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationIntent = new Intent(context, SinglePost.class);
notificationIntent.putExtra("single_id",single_id);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(context, id, notificationIntent, 0);
Notification notification = mBuilder.build();
notification.contentIntent = contentIntent;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
mNotificationManager.notify(notificationsId, notification);
}
public static Bitmap getBitmapFromURL(String strURL) {
try {
URL url = new URL(strURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}