1

내 코드에서 라디오 버튼을 사용하여 라디오 그룹을 사용합니다. 나는 d-pad/handset의 도움으로 라디오 버튼을 점검 할 수 있기를 원합니다. 개별 라디오 버튼의 초점을 잡을 수 없습니다. 나는 다음을 시도했다 :라디오 그룹의 라디오 버튼의 초점을 얻고

radioButton.setFocusable (true); radioButton.setFocusableInTouchMode (true);

라디오 그룹이 선형 레이아웃으로 묶여 있습니다. 그래서 나는 linearLayout을 시도했다. setDescendantFocusability (ViewGroup.FOCUS_AFTER_DESCENDANTS); 지금까지 아무 것도 나를 위해 일하지 못했습니다. 모든 입력이 도움이 될 것입니다.

답변

0

AndroidTV 용 응용 프로그램을 코딩하는 중에도이 문제가 발생했습니다. nextFocus {direction}가 뷰에 설정된 경우에도 가로 라디오 그룹 포커스는 단순히 dpad에서 작동하지 않는 것 같습니다. 당신이 린백 라이브러리를 사용하는 경우

다행히, 당신은 다음을 수행하여 자신을 집중 관리 할 BrowseFrameLayout.onFocusSearchListener을 사용할 수 있습니다 : 첫째

를, 레이아웃 및 라디오 그룹은 포커스가되지 않도록하거나 설정 focusableIn TouchMode를 참된. 이렇게하면 레이아웃/그룹이 개별 버튼 대신 포커스를받습니다.

선형 레이아웃 대신 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을 반환하면 시스템에서 기본 포커스 전환을 처리 할 수 ​​있으며 초점을 맞출 경우 포커스 변경을 차단합니다 (예 : 수평 라디오 그룹의 위/아래 클릭에 유용함). 다른보기를 반환하면 해당보기가 초점을 맞 춥니 다.

이 코드는 어떤 방향 으로든 숫자/유형의보기에 맞게 조정할 수 있으므로 구현하기가 짜증나지만 매우 유용합니다.

이것은 많은 좌절감을 안겨 줬는데, 도움이 되었기를 바랍니다.