获得广播组中单选按钮的焦点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获得广播组中单选按钮的焦点相关的知识,希望对你有一定的参考价值。
在我的代码中,我使用带有单选按钮的无线电组。我希望能够在d-pad /手机的帮助下检查单选按钮。我无法获得单个单选按钮的焦点。我试着做以下事情:
radioButton.setFocusable(真); radioButton.setFocusableInTouchMode(真);
我的广播组以线性布局包装。所以我也试过了linearLayout.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);但到目前为止,对我来说没有任何作用。任何输入都会有所帮助
在为androidTV编写应用程序时,我也遇到了这个问题。即使在视图上设置了nextFocus {direction},水平无线电组焦点似乎也无法用于dpad。
幸运的是,如果您使用leanback库,则可以使用BrowseFrameLayout.onFocusSearchListener通过执行以下操作来自行管理焦点:
首先,确保您的布局和单选按钮组没有focusable或focusableInTouchMode设置为true。这将导致布局/组接收焦点而不是单个按钮。
将您的广播组包裹在BrowseFrameLayout而不是线性布局中:
<android.support.v17.leanback.widget.BrowseFrameLayout
android:id="@+id/browse_frame_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioGroup
android:id="@+id/radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/first_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First Button Text" />
<RadioButton
android:id="@+id/second_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second Button Text" />
</RadioGroup>
</android.support.v17.leanback.widget.BrowseFrameLayout>
然后在您的片段或活动代码中添加以下内容:
BrowseFrameLayout.OnFocusSearchListener onFocusSearchListener =
new BrowseFrameLayout.OnFocusSearchListener() {
@Override
public View onFocusSearch(View focused, int direction) {
if (focused.getId() == R.id.first_button && direction == View.FOCUS_RIGHT) {
return findViewById(R.id.second_button);
} else if (focused.getId() == R.id.second_button && direction == View.FOCUS_LEFT) {
return findViewById(R.id.first_button);
} else if (focused.getId() == R.id.first_button && direction == View.FOCUS_LEFT) {
// return null to allow for default focus transition
return null;
} else {
// return focused to avoid focus change
return focused;
}
}
};
((BrowseFrameLayout) findViewById(R.id.browse_frame_layout)).setOnFocusSearchListener(onFocusSearchListener);
而已!正如示例代码段中的注释所述,返回null将允许系统处理默认焦点转换,并且返回focus将阻止焦点更改(例如,有助于水平无线电组的上/下点击)。返回任何其他视图将关注该视图。
可以针对任何方向的任何数量/类型的视图调整此代码,因此虽然实现起来很烦人,但它非常有用。
经过很多挫折后,这对我有所帮助,所以我希望它对你有所帮助!
以上是关于获得广播组中单选按钮的焦点的主要内容,如果未能解决你的问题,请参考以下文章