android focus 주기 - 액티비티 시작에서 EditText가 포커스를 얻지 못하도록합니다.





15 Answers

실제 문제는 당신이 전혀 집중하지 않기를 바라는 것입니까? 또는 EditText 에 초점을 맞추어 가상 키보드를 표시하지 않겠습니까? 시작에 초점을 둔 EditText 관한 문제는 실제로 나타나지 않지만 사용자가 EditText 에 집중하여 결과적으로 키보드를 열 것을 명시 적으로 요청하지 않았을 때 softInput 창이 열리는 것이 분명히 문제입니다.

가상 키보드의 문제인 경우 AndroidManifest.xml <activity> 요소 설명서를 참조하십시오.

android:windowSoftInputMode="stateHidden" - 활동을 입력 할 때 항상 숨 깁니다.

또는 android:windowSoftInputMode="stateUnchanged" - 변경하지 마십시오 (예 : 아직 표시되지 않은 경우 표시 하지 말고 활동에 입장 할 때 열어 둔 경우 열어 두십시오).

해제 이동 안드로이드

나는 두 가지 요소로 안드로이드에 Activity 를 가지고있다 :

  1. EditText
  2. ListView

Activity 가 시작되면 EditText 즉시 입력 포커스 (깜박이는 커서)를 갖습니다. 시작할 때 입력 컨트롤을 갖기를 컨트롤이 원하지 않습니다. 나는 시도했다 :

EditText.setSelected(false);

불운. 어떻게 Activity 가 시작될 때 EditText 가 스스로 선택하지 않도록 설득 할 수 있습니까?




내가 찾은 유일한 해결책은 다음과 같습니다.

  • LinearLayout 만들기 (다른 종류의 레이아웃이 작동하는 경우 몰라요)
  • android:focusable="true" 속성을 설정합니다 android:focusable="true"

그리고 EditText 는 액티비티를 시작한 후에 포커스를 얻지 못합니다.




다른 포스터에서 제공 한 정보를 사용하여 다음 솔루션을 사용했습니다.

레이아웃 XML에서

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

inCreate ()에서

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

마지막으로 onResume ()에서

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}



setSelected(false) 대신 clearFocus() 를 시도하십시오. Android의 모든보기에는 초점 성 및 선택 가능성이 모두 포함되어 있습니다. 초점을 명확히 해두 고 싶다고 생각합니다.




이 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 자동 초점을 수정하는 방법은 다음과 같습니다.

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>



"focusable""focusable in focus mode"설정 하여 layout 의 첫 번째 TextView 를 true로 설정할 수 있습니다. 이런 식으로 액티비티가 시작될 때 TextView 는 집중 될 것입니다 만 그 특성으로 인해 화면에 초점을 맞추지 않은 것을 볼 수 있으며 물론 키보드가 표시 되지 않습니다.




프로그래밍 방식으로 모든 필드에서 포커스를 제거해야했습니다. 방금 주 레이아웃 정의에 다음 두 문장을 추가했습니다.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

그게 전부 야. 내 문제를 즉시 수정했습니다. 고마워, 실버, 나를 올바른 방향으로 가리키기 위해서.




가장 간단한 대답은 XML의 부모 레이아웃에 추가하는 것입니다.

android:focusable="true" 
android:focusableInTouchMode="true"



첫 번째 수정 가능한 입력란보다 먼저 시도해보십시오.

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();



늦었지 만 도움이 될지도 모른다. 레이아웃 맨 위에 더미 EditText를 만든 다음 onCreate() 에서 myDummyEditText.requestFocus() 를 호출하십시오.

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

그것은 내가 예상 한 것처럼 행동하는 것 같습니다. 구성 변경 등을 처리 할 필요가 없습니다. 긴 TextView (지침)가있는 활동에이 기능이 필요했습니다.




그래, 나는 똑같은 짓을했다. 초기 초점을 얻는 '더미'선형 레이아웃을 만든다. 또한 '다음'포커스 ID를 설정하여 스크롤 한 후 사용자가 더 이상 포커스를 맞출 수 없도록합니다.

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

단지보기에 초점을 없애기위한 많은 작업 ..

감사




모든 장치에서 작동하는 것은 다음과 같습니다.

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

문제가되는 집중 뷰 앞에보기 만하면됩니다.




가장 간단한 방법은 onCreate의 다른 뷰에 초점을 맞추는 것입니다.

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

이로 인해 소프트 키보드가 멈추고 EditText에 깜박이는 커서가 없었습니다.




<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>



레이아웃 폭과 높이가 0dp 설정된 더미 EditText 를 생성하고 해당 뷰에 포커스를 요청 0dp 을 수행 할 수 있습니다. xml 레이아웃에 다음 코드 스 니펫을 추가합니다.

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>



Related