пользовательское уведомление Android не работает с макетом ограничения - PullRequest
0 голосов
/ 04 декабря 2018

Я провожу целый день, чтобы выяснить, почему мои пользовательские уведомления не отображаются.В конце концов, это была проблема с макетом ограничения.Когда я пытаюсь создать custom_notification.xml с макетом ограничения, уведомление не отображается, но если я переключаюсь на линейный макет, уведомление работает.Кто-нибудь может сказать мне, почему это происходит?

custom_notitication.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_notitication.xml с макетом ограничения (это не работает)

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

и код Котлина

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

и мой buid.gradle

    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'

1 Ответ

0 голосов
/ 04 декабря 2018

Макеты уведомлений используют реализацию RemoteViews - так же, как виджеты.

Очень мало видов, которые совместимы с RemoteViews.Это только подмножество нативных / базовых представлений (т.е. без поддержки представлений, без библиотечных представлений, без пользовательских представлений), и это подмножество не является исчерпывающим:

  • AdapterViewFlipper
  • FrameLayout
  • GridLayout
  • GridView
  • LinearLayout
  • ListView
  • RelativeLayout
  • StackView
  • ViewFlipper
  • AnalogClock
  • Кнопка
  • Хронометр
  • ImageButton
  • ImageView
  • ProgressBar
  • TextClock
  • TextView

Другие виды не будут работать.

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

...