获取收音机组中单选按钮的焦点

问题描述:

在我的代码中,我使用带单选按钮的收音机组。我希望能够在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将允许系统处理默认焦点转换,并且返回焦点将阻止焦点更改(例如,有助于在水平射频组上进行向上/向下单击)。返回任何其他视图将集中该视图。

此代码可以针对任何方向的任意数量/类型的视图进行调整,因此虽然可能会令人讨厌执行,但它非常有用。

这帮了我很多挫折后,所以我希望它可以帮助你!