Android Q之氣泡彈窗

在Android Q中,用戶可以藉助氣泡,輕鬆地在設備上任何位置進行多任務處理。氣泡內置於“通知”系統中,它會浮動在其他應用的上層,並會跟隨用戶的移動而移動到屏幕的任何位置,用於取代SYSTEM_ALERT_WINDOW。氣泡可以展開顯示應用功能和信息,並在不使用時摺疊起來。當設備處於已鎖定狀態或始終保持活動狀態,氣泡會像通知那樣顯示。氣泡彈窗效果如下圖:

一、氣泡配置信息 

氣泡是一種可以選擇停用的功能,在應用顯示第一個氣泡時,系統會彈出權限對話框,提供兩種選項:

  • 屏蔽來自您的應用的所有氣泡 - 通知不會被屏蔽,但永遠不會顯示爲氣泡;
  • 允許來自您的應用的所有氣泡 - 通過 BubbleMetaData 發送的所有通知都會顯示爲氣泡;

氣泡是通過Notification API創建的。我們如果要讓通知顯示氣泡效果,需要添加一些配置信息。因爲氣泡的展開視圖是根據選擇的Activity來創建的,此Activity需要經過配置才能顯示爲氣泡。此Activity必須是可以調整大小嵌入式的,並始終可以在文檔模式界面下啓動。如下代碼是氣泡Activity的配置:

<activity
      android:name=".BubbleActivity"
      android:theme="@style/AppTheme.NoActionBar"
      android:label="@string/title_activity_bubble"
      android:allowEmbedded="true"
      android:documentLaunchMode="always"
      android:resizeableActivity="true"
    />

二、發送氣泡 

要發送氣泡,需要執行如下步驟:

發送氣泡的實例代碼如下:

// 創建氣泡intent
    Intent target = new Intent(mContext, BubbleActivity.class);
    PendingIntent bubbleIntent =
        PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);

    // 創建氣泡元數據
    Notification.BubbleMetadata bubbleData =
        new Notification.BubbleMetadata.Builder()
            .setDesiredHeight(600)
            // Note: although you can set the icon is not displayed in Q Beta 2
            .setIcon(Icon.createWithResource(context, R.drawable.icon))
            .setIntent(bubbleIntent)
            .build();

    // 創建通知
    Person chatBot = new Person.Builder()
            .setBot(true)
            .setName("BubbleBot")
            .setImportant(true)
            .build();

    Notification.Builder builder =
        new Notification.Builder(mContext, CHANNEL_ID)
            .setContentIntent(contentIntent)
            .setSmallIcon(smallIcon)
            .setBubbleMetadata(bubbleData);

 

三、創建展開的氣泡

我們可以將氣泡配置爲自動展開顯示,可以使用以下方法來設置用於啓用這些行爲的標記:setAutoExpandBubble()setSuppressInitialNotification()

Java實例代碼如下:

Notification.BubbleMetadata bubbleData =
        new Notification.BubbleMetadata.Builder()
            .setDesiredHeight(600)
            .setIntent(bubbleIntent)
            .setAutoExpandBubble(true)
            .setSuppressInitialNotification(true)
            .build();

kotlin實例代碼如下:

 val bubbleMetadata = Notification.BubbleMetadata.Builder()
        .setDesiredHeight(600)
        .setIntent(bubbleIntent)
        .setAutoExpandBubble(true)
        .setSuppressInitialNotification(true)
        .build()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章