Android通过remoteViews自定义通知

1.简介

通过remoteViews我们可以自定义通知推送,但是remoteViews也有许多限制。remoteViews仅支持以下小部件:AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextClock、TextView;仅支持以下布局:AdapterViewFlipper、FrameLayout、GridLayout、GridView
、LinearLayout、ListView、RelativeLayout、StackView
、ViewFlipper。
图片
图片
主要方法:
setViewVisibility:设置指定控件是否可见。
setViewPadding:设置指定控件的间距。
setTextViewText:设置指定TextView或Button控件的文字内容。
setTextViewTextSize:设置指定TextView或Button控件的文字大小。
setTextColor:设置指定TextView或Button控件的文字颜色。
setTextViewCompoundDrawables:设置指定TextView或Button控件的文字周围图标。
setImageViewResource:设置ImageView或ImgaeButton控件的资源编号。
setImageViewBitmap:设置ImageView或ImgaeButton控件的位图对象。
setChronometer:设置计时器信息。
setProgressBar:设置进度条信息,包括最大值与当前进度。
setOnClickPendingIntent:设置指定控件的点击响应动作。
完成RemoteViews对象的构建与设置后调用Notification对象的setContent方法,即可完成自定义通知的定义。

2.示例

  1. 自定义通知的布局文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="60dp"
    >

    <ImageView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:scaleType="fitCenter"
        android:src="@drawable/tt"/>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="5"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:orientation="vertical"
        >

        <ProgressBar
            android:id="@+id/pb_play"
            android:layout_width="match_parent"
            style="?android:progressBarStyleHorizontal"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:max="100"
            android:progress="10"/>

        <TextView
            android:id="@+id/tv_play"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:textColor="@color/black"
            android:textSize="17sp"
            />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <Chronometer
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:id="@+id/ch_play"/>

        <Button
            android:id="@+id/btn_play"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="2"
            android:text="暂停"
            android:textColor="@color/black"
            android:textSize="17sp"/>
    </LinearLayout>
</LinearLayout>
  1. 使用自定义通知的代码。
private void sendCustomNotification(Context context, String song, boolean isPlay, int progress, long time) {
        Intent intent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, R.string.app_name, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.remote_view_demo);

        if(isPlay) {
            remoteViews.setTextViewText(R.id.tv_play, "正在播放" + song);
            remoteViews.setTextViewText(R.id.btn_play, "暂停");
            remoteViews.setChronometer(R.id.ch_play, time, "%s", true);
        } else {
            remoteViews.setTextViewText(R.id.tv_play, "暂停播放" + song);
            remoteViews.setTextViewText(R.id.btn_play, "播放");
            remoteViews.setChronometer(R.id.ch_play, time, "%s", false);
        }

        remoteViews.setProgressBar(R.id.pb_play, 100, progress, false);
        remoteViews.setOnClickPendingIntent(R.id.btn_play, pendingIntent);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "message");
        builder.setContentIntent(pendingIntent).setContent(remoteViews).setTicker(song).setSmallIcon(R.drawable.tt_s);
        Notification notification = builder.build();
        NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1, notification);
    }
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

轨迹 ‎‎ ‎‎

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者