获取收音机组中单选按钮的焦点
在我的代码中,我使用带单选按钮的收音机组。我希望能够在d-pad/handset的帮助下检查单选按钮。我无法获得单个单选按钮的焦点。我试图做到以下几点:获取收音机组中单选按钮的焦点
radioButton.setFocusable(true); radioButton.setFocusableInTouchMode(true);
我的收音机组以线性布局包裹。所以我也试过linearLayout.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);但到目前为止,没有任何工作可以帮助我任何输入将有帮助
我在编写AndroidTV应用程序时遇到了这个问题。看来,即使在视图上设置了nextFocus {direction}时,水平无线电组的焦点也无法与dpad一起使用。
幸运的是,如果你使用的是Leanback的图书馆,你可以使用BrowseFrameLayout.onFocusSearchListener管理通过执行以下操作集中自己:
首先,确保你的布局和广播组不具有可聚焦或focusableInTouchMode设为真正。这将导致布局/组获得焦点而不是单个按钮。
环绕你单选按钮组在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将允许系统处理默认焦点转换,并且返回焦点将阻止焦点更改(例如,有助于在水平射频组上进行向上/向下单击)。返回任何其他视图将集中该视图。
此代码可以针对任何方向的任意数量/类型的视图进行调整,因此虽然可能会令人讨厌执行,但它非常有用。
这帮了我很多挫折后,所以我希望它可以帮助你!