Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change Notification Layout

I decompiled my system music app (from Sony Ericsson for Android GB 2.3.7) because I want to change the notification layout. I found the method which creates the notification with this code:

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);     } } 

My question now is: How can I change the notification layout? I want to build a layout which looks like the original android notification layout but with an extra image on the right of the notification. How can I do this?

like image 279
Cilenco Avatar asked Aug 21 '13 21:08

Cilenco


People also ask

How do I change the notification layout on my iPhone?

Go to Settings > Notifications. Choose how you want notifications displayed on the Lock Screen: View just the number of notifications: Tap Count. View the notifications grouped into stacks by app: Tap Stack.

How do I change the notification style on my Android?

Tap the notification category you want to adjust, such as Direct Messages. Tap Show notifications toggle at the top of the menu to completely turn off notifications for this category. Tap Notification style to change your notifications to sound-only, silent, or silent and minimized if desired.


1 Answers

First create an xml for your notification.

custom_notification.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> 

Now the java code:

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;     } } 

Hope this thing works for you.

Edit: You can also visit if you come across problem like this.

Also, you can visit here for more information.

Edit April 26 2016 You can use NotificationCompat.Builder for creating Notification instance as below:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)             .setSmallIcon(icon)             .setContent(contentView)             .setContentTitle("Custom Notification")             .setWhen(when); ... mNotificationManager.notify(1, notificationBuilder.build()); 
like image 129
Chintan Soni Avatar answered Sep 20 '22 05:09

Chintan Soni