상세 컨텐츠

본문 제목

[안드로이드] Notification 커스텀 알림창 쉽게 적용해보기

안드로이드

by aries574 2020. 12. 31. 10:51

본문


2020/12/30 - [안드로이드] - [안드로이드] Notification 알림창에 ProgressBar 기능 추가

이번 시간에는 커스텀 화면을 만들어서 Notification 알림창에 적용하는 걸 알아보겠습니다.



1. 커스텀 화면(요약버전) custom_notification.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="64dp"
android:orientation="vertical"
>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="요약 알림"
style="@style/TextAppearance.Compat.Notification.Title"/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="안녕 요약 알림상태야"
style="@style/TextAppearance.Compat.Notification.Info"
/>

</LinearLayout>


2. 커스텀 화면(확장버전) custom_expanded.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="125dp"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="확장 알림"
style="@style/TextAppearance.Compat.Notification.Title"/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="확장알림 라인2"
style="@style/TextAppearance.Compat.Notification.Line2"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/content"
style="@style/TextAppearance.Compat.Notification.Info"
/>
</LinearLayout>


values -> strings.xml

<resources>
<string name="app_name">NotificationButton</string>

<string name="content">
여기는 알림내용이 잔뜩 들어가는 곳입니다.
여기는 알림내용이 잔뜩 들어가는 곳입니다.
여기는 알림내용이 잔뜩 들어가는 곳입니다.
여기는 알림내용이 잔뜩 들어가는 곳입니다.
여기는 알림내용이 잔뜩 들어가는 곳입니다.
여기는 알림내용이 잔뜩 들어가는 곳입니다.
여기는 알림내용이 잔뜩 들어가는 곳입니다.
</string>
</resources>


3. 메인화면 구현(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="알림 호출"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>


4. 메인코드 구현(MainActivity.java)

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RemoteViews;

public class MainActivity extends AppCompatActivity {

public final String CHANNEL_ID = "my_notification_channel";
public static final int NOTIFICATION_ID = 101;

public static final String TEXT_REPLY = "text_reply";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button notificationBtn = findViewById(R.id.button);
notificationBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
displayNotification(v);
}
});
}

//알림 설정
public void displayNotification(View v){

createNotificationChannel();

//알림 커스텀 화면 선언
RemoteViews custom_layout = new RemoteViews(getPackageName(), R.layout.custom_notification);
RemoteViews expanded_layout = new RemoteViews(getPackageName(), R.layout.custom_expanded);

//알림설정
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_get);
builder.setPriority(NotificationManagerCompat.IMPORTANCE_DEFAULT);
builder.setStyle(new NotificationCompat.DecoratedCustomViewStyle());

//알림 커스텀 적용
builder.setCustomContentView(custom_layout);
builder.setCustomBigContentView(expanded_layout);


NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(this);
notificationManagerCompat.notify(NOTIFICATION_ID, builder.build());
}

//채널 셋팅
private void createNotificationChannel(){

//오레오부터는 알림을 채널에 등록해야 한다.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
CharSequence name = "채널이름";
String description = "채널설명";
int importance = NotificationManager.IMPORTANCE_DEFAULT;

//채널생성
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, name, importance);

notificationChannel.setDescription(description);

//알림매니저 생성
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

//알림매니저에 채널등록록
notificationManager.createNotificationChannel(notificationChannel);
}
}
}


5. 실행화면



반응형

관련글 더보기

댓글 영역