远程视图 RemoteViews

RemoteViews 与 Activity 的区别

  1. RemoteViews 主要用于通知栏部件和桌面部件的布局,而 Activity 用于活动页面的布局
  2. RemoteViews 只支持少数几种控件,如 TextView、ImageView、Button、ImageButton、ProgressBar、Chronometer、AnalogClock
  3. RemoteViews 不可直接获取和设置控件信息,只能通过该对象的 set 方法来修改控件信息

常用API详解

// 构造函数,第一个是包名,第二个是布局参数
RemoteViews(String packageName, int layoutId) 
// 设置指定控件是否可见
setViewVisibility(int viewId, int visibility)
// 设置指定控件的间距
setViewPadding(int viewId, int left, int top, int right, int bottom)
// 设置文本控件的文字内容
setTextViewText(int viewId, CharSequence text)
// 设置文本控件的文字大小
setTextViewTextSize(int viewId, int units, float size)
// 设置文本控件的文字颜色
setTextColor(int viewId, @ColorInt int color)
// 设置文本控件周围的图标
setTextViewCompoundDrawables(int viewId, int left, int top, int right, int bottom)
// 设置 ImageView 或 ImageButton 控件的资源编号
setImageViewResource(int viewId, int srcId) 
// 设置 ImageView 或 ImageButton 控件的位图图像
setImageViewBitmap(int viewId, Bitmap bitmap)
// 设置计时器信息
setChronometer(int viewId, long base, String format, boolean started) 
// 设置进度条信息
gressBar(int viewId, int max, int progress, boolean indeterminate)
// 设置指定控件的点击响应动作
setOnClickPendingIntent(int viewId, PendingIntent pendingIntent)

自定义一个播放器通知视图

布局文件

<androidx.appcompat.widget.LinearLayoutCompat 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:orientation="horizontal"
    android:gravity="center_vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:padding="10dp">
    
    <androidx.appcompat.widget.AppCompatImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@mipmap/ic_app"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/pb_progress"
        tools:ignore="MissingConstraints" />

   <androidx.appcompat.widget.LinearLayoutCompat
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">
       <ProgressBar
           android:id="@+id/pb_progress"
           style="?android:attr/progressBarStyleHorizontal"
           android:layout_width="match_parent"
           android:layout_height="30dp"
           app:layout_constraintRight_toRightOf="parent"
           tools:ignore="MissingConstraints" />
       <FrameLayout
           android:layout_width="match_parent"
           android:layout_gravity="center_horizontal"
           android:gravity="center_vertical"
           android:layout_height="wrap_content">
          <androidx.appcompat.widget.AppCompatTextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="海阔天空-Beyound"
              />
           <androidx.appcompat.widget.AppCompatButton
               android:layout_width="wrap_content"
               android:text="暂停"
               android:layout_gravity="right"
               android:layout_height="wrap_content"/>
       </FrameLayout>
   </androidx.appcompat.widget.LinearLayoutCompat>

</androidx.appcompat.widget.LinearLayoutCompat>

构建远程视图

private fun buildRemoteMusic(event:String,song:String,isPlay:Boolean,progress: Int,time:Long):RemoteViews{
        
        val notify_music = RemoteViews(packageName,R.layout.activity_progress)
        
        if (isPlay){
            notify_music.setTextViewText(R.id.btn_play,"暂停")
            notify_music.setTextViewText(R.id.tv_play,song+"正在播放")
            notify_music.setChronometer(R.id.pb_progress,time,"%s",true)
        }else{
            notify_music.setTextViewText(R.id.btn_play,"播放")
            notify_music.setTextViewText(R.id.tv_play,song+"暂停播放")
            notify_music.setChronometer(R.id.pb_progress,time,"%s",true)
        }
        
        notify_music.setProgressBar(R.id.pb_progress,100,progress,false)
        
        val pIntent = Intent(event)
        
        val piPause = PendingIntent.getBroadcast(this,R.string.app_name,pIntent,PendingIntent.FLAG_UPDATE_CURRENT)
        
        // 设置暂停/继续按钮的点击动作对应的广播事件
        notify_music.setOnClickPendingIntent(R.id.btn_play,piPause)
        
        return notify_music
    }

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android 中,你可以使用 `Handler` 和 `postDelayed` 方法来实现定时更新 `RemoteViews`。以下是一个示例代码,展示如何在 `RemoteViews` 中实现定时更新: ```kotlin import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider import android.content.Context import android.os.Handler import android.widget.RemoteViews class MyWidgetProvider : AppWidgetProvider() { private val updateInterval = 1000L // 更新间隔,单位为毫秒 override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { for (appWidgetId in appWidgetIds) { val views = RemoteViews(context.packageName, R.layout.widget_layout) // 创建 Handler 对象 val handler = Handler(context.mainLooper) // 创建一个 Runnable,用于更新 RemoteViews val updateRunnable = object : Runnable { override fun run() { // 更新 RemoteViews 中的内容 updateViews(views) // 延迟指定的时间后再次调用该 Runnable handler.postDelayed(this, updateInterval) } } // 开始调用 Runnable,实现定时更新 handler.postDelayed(updateRunnable, updateInterval) // 更新 App Widget 布局 appWidgetManager.updateAppWidget(appWidgetId, views) } } private fun updateViews(views: RemoteViews) { // 在这里更新 RemoteViews 的内容 // 例如可以使用 views.setTextViewText() 方法更新文本内容 } } ``` 在上述示例中,我们在 `onUpdate` 方法中创建了一个 `Handler` 对象,并定义了一个 `Runnable` 对象来更新 `RemoteViews` 的内容。我们使用 `handler.postDelayed` 方法来延迟指定的时间后再次调用 `Runnable`,从而实现定时更新。 你可以在 `updateViews` 方法中实现对 `RemoteViews` 的内容进行更新。例如,可以使用 `views.setTextViewText` 方法来更新文本内容。 希望这个示例对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值