android自定义通知不适用于约束布局



我花了一整天的时间来弄清楚为什么我的自定义通知没有显示。最后,这是约束布局的问题。当我尝试使用约束布局构建custom_notification.xml时,通知不会显示,但如果我更改为线性布局,通知会起作用。有人能告诉我为什么会发生这种事吗?

custom_notitiction.xml具有线性布局(此布局有效(

<LinearLayout 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:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Button"
<Button
android:layout_weight="1"
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Button"
/>
</LinearLayout>

custom_notitiction.xml与Constraint Layout(这不起作用(

<android.support.constraint.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:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">

<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Button"
app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:layout_weight="1"
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button"
/>
</android.support.constraint.ConstraintLayout>

和kotlin码

fun getNotification(context: Context): Notification {
val mNotificationManager1: NotificationManager?
val notification: Notification
mNotificationManager1 = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
createChannel(mNotificationManager1)
val contentView = RemoteViews(applicationContext.packageName, R.layout.custom_notifaction)
val mBuilder = NotificationCompat.Builder(applicationContext,"LockScreenTouch")
.setSmallIcon(R.mipmap.ic_launcher)
.setCustomBigContentView(contentView)
notification = mBuilder.build()
mNotificationManager1.notify(PostNotifactionActivity.ONGOING_NOTIFICATION_ID, notification)
return notification
}
@TargetApi(26)
@Synchronized
private fun createChannel(notificationManager: NotificationManager?) {
val name = "lockScreen"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel("LockScreenTouch", name, importance)
mChannel.enableLights(true)
mChannel.lightColor = Color.BLUE
notificationManager!!.createNotificationChannel(mChannel)
}

和我的内置级

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0'

Notification布局使用RemoteViews实现——与小部件相同。

与RemoteViews兼容的视图非常少。它只是原生/框架视图的一个子集(即没有支持视图、没有库视图、没有自定义视图(,并且该子集并不详尽:

  • AdapterViewFlipper
  • 框架布局
  • 网格布局
  • 网格视图
  • LinearLayout
  • 列表视图
  • RelativeLayout
  • StackView
  • 查看Flipper
  • 模拟时钟
  • 按钮
  • 计时器
  • 图像按钮
  • 图像视图
  • 进度栏
  • 文本时钟
  • 文本视图

没有其他视图可以工作。

https://developer.android.com/reference/android/widget/RemoteViews

最新更新