我想为 Android Auto 制作一个应用程序,用户应该能够在驾驶过程中按名称搜索一长串项目。显然,驾驶时键盘会被挡住,我知道这一点,但我在本机手机应用程序和 Spotify 中看到了一项功能,该功能允许用户选择他想要看到的内容的第一个字母来抓住结果。 (这已经大大减少了结果,因为它会将它们分割为 28。我知道不可能使用多个字母进行搜索,我也不需要它,一个就足够了,就已经很好了)。 以下是 Spotify 中的屏幕截图:
我在 CarApiLvl 5 上使用 Android for Cars 应用程序库的 SearchTemplate 和 Gridtemplate(因为 Spotifys 看起来像 Gridtemplate)进行了尝试,并添加了一个巨大的列表(100 个项目),使模板显示滚动条。我还在前面的每个项目中添加了一个大写字母,希望系统可以查找类似的内容。然而,该功能没有自动显示,所以我想它要么不是内置的,要么需要一些特定的元数据/回调才能工作。 遗憾的是,我找不到任何关于它的官方文档。 你们有人知道如何使用此功能吗? 是否有我需要实现和公开的排序功能或类似的功能? 我正在使用 Android for Cars 应用程序库,因此我无法真正执行任何自定义操作。
目前汽车应用程序库应用程序还没有类似的功能。尽管像 Spotify 这样的媒体应用程序可能看起来与使用汽车应用程序库构建的应用程序类似,但它们实际上并不是用它构建的。如果您愿意,可以针对汽车应用程序库提出功能请求,并提供有关您的用例的详细信息。
此示例展示了如何在 Android Auto 中实现基本搜索屏幕
import android.util.Log
import androidx.car.app.CarContext
import androidx.car.app.Screen
import androidx.car.app.model.SearchTemplate
import androidx.car.app.model.Template
import com.your_package.automotive.AndroidAutoSession
class SearchDestinationScreen(
carContext: CarContext,
private val session: AndroidAutoSession,
private val screenId: String
) : Screen(carContext), SearchTemplate.SearchCallback {
override fun onSearchSubmitted(searchText: String) {
Log.d(TAG, "onSearchSubmitted triggered: $searchText")
}
override fun onSearchTextChanged(searchText: String) {
Log.d(TAG, "onSearchTextChanged triggered: $searchText")
}
override fun onGetTemplate(): Template {
val searchTemplate = SearchTemplate.Builder(this)
return searchTemplate.build()
}
companion object {
const val TAG = "SearchDestinationScreen"
}
}