將 Clickable
修飾詞新增到版面配置元素,即可在使用者輕觸該版面配置元素時做出回應。做為點擊事件的回應,您可以執行下列兩項操作:
LaunchAction
:啟動在AndroidManifest.xml
中明確宣告為android:exported="true"
的活動。LoadAction
:強制重新整理資訊方塊,呼叫onTileRequest()
。
如要設定 LaunchAction
,請在使用者輕觸元素時,啟動要啟動的活動的類別名稱和套件名稱,如以下程式碼範例所示:
Kotlin
private fun tappableElement(): LayoutElement = Text.Builder() .setText("Tap me!") .setModifiers(Modifiers.Builder() .setClickable(Clickable.Builder() .setId("foo") .setOnClick(LaunchAction.Builder() .setAndroidActivity(AndroidActivity.Builder() .setClassName(MyActivity::class.java.getName()) .setPackageName(this.packageName) .build() ).build() ).build() ).build() ).build()
Java
private LayoutElement tappableElement() { return new Text.Builder() .setText("Tap me!") .setModifiers(new Modifiers.Builder() .setClickable(new Clickable.Builder() .setId("foo") .setOnClick(new LaunchAction.Builder() .setAndroidActivity(new AndroidActivity.Builder() .setClassName(MyActivity.class.getName()) .setPackageName(this.getPackageName()) .build() ).build() ).build() ).build() ).build(); }
如以下範例所示,您可以在啟動的活動內擷取資訊方塊使用的 ID:
Kotlin
class MyActivity : FragmentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val clickableId = intent.getStringExtra(TileService.EXTRA_CLICKABLE_ID) // clickableId will be "foo" when launched from the Tile } }
Java
public class MyActivity extends FragmentActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); String clickableId = getIntent().getStringExtra(TileService.EXTRA_CLICKABLE_ID); // clickableId will be "foo" when launched from the Tile } }
您也可以在使用者輕觸版面配置元素時使用 LoadAction
重新整理資訊方塊,如以下程式碼範例所示:
Kotlin
private fun tappableElement(): LayoutElement = Text.Builder() .setText("Tap me!") .setModifiers(Modifiers.Builder() .setClickable(Clickable.Builder() .setId("foo") .setOnClick(LoadAction.Builder().build()) .build() ).build() ).build()
Java
private LayoutElement tappableElement() { return new Text.Builder() .setText("Tap me!") .setModifiers(new Modifiers.Builder() .setClickable(new Clickable.Builder() .setId("foo") .setOnClick(new LoadAction.Builder().build()) .build() ).build() ).build() }
在這種情況下,setId()
當中設定的可按式 ID 將會傳遞到 onTileRequest()
呼叫內,讓您可以按照這個 ID 轉譯其他版面配置,如以下程式碼範例所示:
Kotlin
override fun onTileRequest(requestParams: TileRequest) = Futures.immediateFuture( Tile.Builder() .setResourcesVersion("1") .setTimeline(Timeline.Builder() .addTimelineEntry(TimelineEntry.Builder() .setLayout(Layout.Builder() .setRoot( when(requestParams.state.lastClickableId) { "foo" -> myFooLayout() else -> myOtherLayout() } ).build() ).build() ).build() ).build() )
Java
@NonNull @Override protected ListenableFuture<Tile> onTileRequest( @NonNull TileRequest requestParams ) { LayoutElement root; if(requestParams.getState().getLastClickableId().equals("foo")) { root = myFooLayout(); } else { root = myOtherLayout(); } return Futures.immediateFuture(new Tile.Builder() .setResourcesVersion("1") .setTimeline(new Timeline.Builder() .addTimelineEntry(TimelineEntry.Builder() .setLayout(Layout.Builder() .setRoot(root) .build() ).build() ).build() ).build()); }