1
我有Android電視應用程序的自定義設計,不是所有人都匹配leanback庫中的小部件。 如何使用設計支持庫(例如TabLayout)?它抱怨我需要使用AppCompat主題。 我知道谷歌不建議使用電視上的標籤。如何將設計支持庫與leanback一起用於android TV?
我有Android電視應用程序的自定義設計,不是所有人都匹配leanback庫中的小部件。 如何使用設計支持庫(例如TabLayout)?它抱怨我需要使用AppCompat主題。 我知道谷歌不建議使用電視上的標籤。如何將設計支持庫與leanback一起用於android TV?
要創建TabLayout
在Leanback的應用程序,你可以使用ContextThemeWrapper
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
val c = ContextThemeWrapper(activity, R.style.Theme_AppCompat)
return LayoutInflater.from(c).inflate(R.layout.my_tablayout, container, false)
}
要獲得DPAD正常工作,我的子類TabLayout
如下:
class FocusableTabLayout(context: Context, attributeSet: AttributeSet): TabLayout(context, attributeSet) {
override fun focusSearch(focused: View?, direction: Int): View? {
val view = super.focusSearch(focused, direction)
if (hasFocus() && view != null) {
if (direction == View.FOCUS_LEFT) {
if (selectedTabPosition > 0) {
getTabAt(selectedTabPosition - 1)?.select()
}
} else if (direction == View.FOCUS_RIGHT) {
if (selectedTabPosition < tabCount) {
getTabAt(selectedTabPosition + 1)?.select()
}
}
}
return view
}
override fun requestFocus(direction: Int, previouslyFocusedRect: Rect?): Boolean {
val tabStrip = getChildAt(0) as LinearLayout
tabStrip.getChildAt(selectedTabPosition).requestFocus()
return true
}
}
如果你打算使用TabLayout
與ViewPager
,然後使用此子類來防止DPAD在一頁上的交互觸發幻燈片:
class FocusableViewPager(context: Context, attributeSet: AttributeSet): ViewPager(context, attributeSet) {
override fun executeKeyEvent(event: KeyEvent): Boolean {
return false
}
}
您是否找到任何解決方案? – tmm1
我寫了自己的TabLayout,沒有找到一個將AppCompat與leanback一起使用的解決方案。 –