다른 컨트롤에 포커스를 설정하지 않고 포커스를 제거하는 방법은 무엇입니까? 모두 비활성화합니다. 이 선호도

UI가 직관적 인 것이 좋습니다. 각 화면은 자연스럽게 앱의 다음 단계로 사용자를 안내해야합니다. 그것을 제외하고는 가능한 한 혼란스럽고 혼란스럽게 만들기 위해 노력합니다.

농담이야 🙂

TableRow각각 읽기 전용 및 포커스 불가능 EditText 컨트롤과 오른쪽에 버튼이 포함 된 세 개의 s가 있습니다. 각 버튼은 동일한 활동을 시작하지만 다른 인수를 사용합니다. 사용자가 거기에서 선택하고 하위 활동이 완료 EditText되어 사용자의 선택으로 해당 항목이 채워집니다.

이것은 고전적인 계단식 값 메커니즘입니다. 각 선택은 다음 선택 등에 사용할 수있는 옵션을 좁 힙니다. 따라서 현재 행의 EditText에 값이 포함될 때까지 다음 각 행에서 두 컨트롤을 모두 비활성화합니다.

이 선호도 순서로 두 가지 중 하나를 수행해야합니다.

  1. 버튼을 클릭하면 다른 버튼에 포커스를 설정하지 않고 즉시 포커스를 제거합니다.
  2. 활동이 시작될 때 첫 번째 버튼에 초점 설정

문제는 하위 활동이 반환 된 후에 나타납니다. 클릭 한 버튼은 포커스를 유지합니다.

Re : 위의 # 1- removeFocus()방법이나 비슷한 것이없는 것 같습니다.

다시 : # 2 위- requestFocus()다음 행의 버튼에 포커스를 설정하는 데 사용할 수 있으며 하위 활동이 반환 된 후에 작동하지만 어떤 이유로 부모 활동의 onCreate().

어느 방향 으로든 UI 일관성이 필요합니다. 하위 활동이 완료된 후 버튼에 포커스가 없거나 각 버튼은 선택 전의 첫 번째 (유일한) 활성 버튼을 포함하여 논리 흐름의 위치에 따라 포커스를받습니다.



답변

clearFocus () 사용은 당신이 찾은 것처럼 (다른 답변에 대한 주석에서 본) 나에게도 효과가 없었지만 결국 나를 위해 일한 것은 다음과 같습니다.

<LinearLayout
    android:id="@+id/my_layout"
    android:focusable="true"
    android:focusableInTouchMode="true" ...>

내 최상위 레이아웃보기 (선형 레이아웃)에. 모든 Buttons / EditTexts 등에서 포커스를 제거하려면 다음을 수행하십시오.

LinearLayout myLayout = (LinearLayout) activity.findViewById(R.id.my_layout);
myLayout.requestFocus();

초점을 맞출 수 있도록 뷰를 설정하지 않는 한 초점을 요청하는 것은 아무것도하지 않았습니다.


답변

오래된 질문이지만 비슷한 문제가 생겼을 때 내가 한 일을 공유 할 것이라고 생각했습니다.

초점을 맞춘 관점은 매번 달라서 매우 일반적인 것을 사용했습니다.

View current = getCurrentFocus();
if (current != null) current.clearFocus();

답변

  1. 사용할 수 있습니다 View.clearFocus().

  2. View.requestFocus()에서 호출 된 사용 onResume().


답변

android:descendantFocusability="beforeDescendants"

아래의 일부 레이아웃 옵션과 함께 활동에서 다음을 사용하면 원하는대로 작동하는 것 같습니다.

 getWindow().getDecorView().findViewById(android.R.id.content).clearFocus();

루트보기에서 다음 매개 변수와 관련하여.

<?xml
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:descendantFocusability="beforeDescendants" />

https://developer.android.com/reference/android/view/ViewGroup#attr_android:descendantFocusability

답변 :
https://forums.xamarin.com/discussion/1856/how-to-disable-auto-focus-on-edit-text

windowSoftInputMode 정보

알아야 할 또 다른 논쟁 점이 ​​있습니다. 기본적으로 Android는 활동의 첫 번째 EditText 또는 포커스 가능한 컨트롤에 초기 포커스를 자동으로 할당합니다. 당연히 InputMethod (일반적으로 소프트 키보드)가 자신을 표시하여 포커스 이벤트에 응답합니다. AndroidManifest.xml의 windowSoftInputMode 속성은 stateAlwaysHidden으로 설정 될 때 자동으로 할당 된 초기 포커스를 무시하도록 키보드에 지시합니다.

<activity
    android:name=".MyActivity"
    android:windowSoftInputMode="stateAlwaysHidden"/>

훌륭한 참조


답변

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:id="@+id/ll_root_view"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

LinearLayout llRootView = findViewBindId(R.id.ll_root_view);
llRootView.clearFocus();

이미 프로필 정보 업데이트를 완료하고 레이아웃의 EditText에서 모든 포커스를 제거 할 때 이것을 사용합니다.

====> 업데이트 : 상위 레이아웃 콘텐츠에서 내 EditText 추가 줄 :

android:focusableInTouchMode="true"

답변

android:windowSoftInputMode="stateHidden"매니페스트에서 활동을 추가 하는 것은 어떻습니까?

이에 대해 논평하는 똑똑한 사람에게서 발췌 : https://stackoverflow.com/a/2059394/956975


답변

우선 100 % 작동합니다 ……..

  1. onResume()메서드를 만듭니다 .
  2. 이 내부 onResume()에서 또 다시 초점을 맞추고보기를 찾을 수 있습니다 findViewById().
  3. 이보기 에이 onResume()세트 내부 requestFocus().
  4. 이보기 에이 onResume()세트 내부 clearFocus.
  5. 동일한 레이아웃의 xml로 이동하여 초점을 맞추고 싶은 상위 뷰를 찾고 focusable사실과 focusableInTuch사실로 설정하십시오 .
  6. 이 내부 onResume()에서 위의 평면도를 찾으십시오.findViewById
  7. 이 내부 onResume()세트 requestFocus()마지막에서이보기에.
  8. 그리고 이제 즐기세요 …