EditText에서 키패드 팝업을 비활성화하는 방법은 무엇입니까?


85

내 앱에서 내 모든 화면의 첫 번째보기는 EditText이므로 화면으로 이동할 때마다 화면 키패드가 나타납니다. 이 팝업을 비활성화하고 EditText를 수동으로 클릭했을 때 활성화하려면 어떻게해야합니까 ????

    eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed);

    eT.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {

            if(hasFocus){
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
            imm.hideSoftInputFromWindow(eT.getWindowToken(), 0);
            }
        }
    });

xml 코드 :

<ImageView
    android:id="@+id/feedPageLogo"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:src="@drawable/wic_logo_small" />

<Button
    android:id="@+id/goButton_feed"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="@string/go" />

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/goButton_feed"
    android:layout_toRightOf="@id/feedPageLogo"
    android:hint="@string/search" />

<TextView
    android:id="@+id/feedLabel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/feedPageLogo"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/feed"
    android:textColor="@color/white" />

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ButtonsLayout_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button
        android:id="@+id/feedButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/feed"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/iWantButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/iwant"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/shareButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/share"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/profileButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/profile"
        android:textColor="@color/black" />
</LinearLayout>

<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/feedListView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/ButtonsLayout_feed"
    android:layout_below="@id/feedLabel"
    android:textSize="15dp" >
</ListView>

세 번째 뷰 (EditText)는 포커스가있는 곳입니다.


xml 코드를 게시 할 수 있습니다.
— user1213202

답변:


178

최상의 솔루션은 프로젝트 매니페스트 파일 (AndroidManifest.xml) 에 있습니다. 다음 속성을 activity구성 에 추가합니다.

android : windowSoftInputMode = "stateHidden"


예:

    <activity android:name=".MainActivity" 
              android:windowSoftInputMode="stateHidden" />

기술:

  • 활동이 사용자주의의 초점이 될 때 소프트 키보드의 상태 (숨겨 지거나 표시됨)입니다.
  • 활동의 기본 창에 대한 조정-소프트 키보드를위한 공간을 만들기 위해 크기가 더 작게 조정되었는지 또는 창 일부가 소프트 키보드로 덮일 때 현재 포커스가 보이도록 내용이 이동되는지 여부.

도입 :

  • API 레벨 3.

문서에 연결

참고 : 여기에서 설정된 값 ( "stateUnspecified"및 "adjustUnspecified"제외)은 테마에 설정된 값을 재정의합니다.


3
이 접근 방식은 활동에 텍스트 필드가 혼합되어있는 경우 실패합니다. 일부는 키보드를 사용하고 다른 일부는 사용하지 않습니다. 이러한 시나리오에서 텍스트 필드별로 이것이 어떻게 달성 될 수 있는지에 대한 내 대답을 참조하십시오.
— slogan621 dec

@ slogan621 여기에서 질문을 이해하는 데 시간을 할애하십시오. 당신은 다른 접선에 있습니다!
— Skynet

83

EditText 위에 '가짜'초점을 맞춘보기를 만들어야합니다.

다음과 같은 것 :

<!-- Stop auto focussing the EditText -->
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/transparent"
    android:focusable="true"
    android:focusableInTouchMode="true">
</LinearLayout>

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:inputType="text" />

이 경우에는 LinearLayout을 사용하여 포커스를 요청했습니다. 도움이 되었기를 바랍니다.

이것은 완벽하게 작동했습니다 ... Zaggo0 덕분에


26
쓸모없는보기를 추가하는 것은 활동의 매니페스트 항목에 android : windowSoftInputMode = "stateHidden"을 추가하는 것과 비교할 때 차선책입니다.
— Chris Horner

@ChrisHorner 둘 다 활동 또는 레이아웃에 대해 지정해야합니다. 똑같은 성가신 일입니다. 둘 다이 솔루션에 잘 작동합니다.
— Nicolas Jafelle 2013 년

2
나는 모든 해결책을 시도했고 이것이 제대로 작동하는 유일한 해결책입니다! 덕분에 명확하고 간단하게
— alfo888_ibg

@ChrisHorner가 말했듯이 쓸모없는보기를 추가하는 것은 좋은 생각이 아닙니다. Manifest가 제안한대로 속성을 매니페스트 파일에 추가 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
— 하거나이

1
보기 계층 구조의 이러한 잘못된 구현! 가능한 한 피해야한다고 생각합니다.
— sud007

43
     edittext.setShowSoftInputOnFocus(false);

이제 원하는 사용자 정의 키보드를 사용할 수 있습니다.


고마워, 이것이 나를 위해 작동하는 유일한 해결책이며 짧고 쉽습니다.
— Max O.

20
자사의 API 레벨 21에서 사용할 수
— Jithu PS

이것이 제가 찾던 것입니다.
— Sanjay Joshi

@ JithuP.S, API 레벨이 19 인 Karbon 티타늄에서 작업하는 이유는 무엇입니까?
— 尤金寶漢子

23

사람들은 여기에 많은 훌륭한 솔루션을 제안했지만 EditText와 함께이 간단한 기술을 사용했습니다 (Java 및 AnroidManifest.xml에는 아무것도 필요하지 않음). Focusable 및 focusableInTouchMode를 EditText에서 직접 false로 설정하십시오.

 <EditText
        android:id="@+id/text_pin"
        android:layout_width="136dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAlignment="center"
        android:inputType="numberPassword"
        android:password="true"
        android:textSize="24dp"
        android:focusable="false"
        android:focusableInTouchMode="false"/>

여기서 내 의도는 사용자에게 PIN을 입력하도록 요청하고 사용자 지정 PIN 패드를 표시하려는 앱 잠금 활동에서이 편집 상자를 사용하는 것입니다. Android Studio 2.1에서 minSdk = 8 및 maxSdk = 23으로 테스트되었습니다.

여기에 이미지 설명 입력



20

활동 클래스에 아래 코드를 추가하십시오.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

사용자가 EditText를 클릭하면 키보드가 팝업됩니다.


10

다음 코드를 사용하여 화상 키보드를 비활성화 할 수 있습니다.

InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);

1
EditText.onClick (im.unhideSoftInputFromWindow (editText.getWindowToken (), 0);) 또는 이와 비슷한 것을 사용하여 다시 활성화 할 수 있습니다.
— Housefly

8

두 가지 간단한 솔루션 :

첫 번째 솔루션 은 매니페스트 xml 파일의 코드 줄 아래에 추가됩니다. Manifest 파일 (AndroidManifest.xml)에서 활동 구성에 다음 속성을 추가하십시오.

android : windowSoftInputMode = "stateHidden"

예:

<activity android:name=".MainActivity" 
          android:windowSoftInputMode="stateHidden" />

두 번째 솔루션 은 활동에서 코드 줄 아래에 추가하는 것입니다.

//Block auto opening keyboard  
  this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

위의 솔루션 중 하나를 사용할 수 있습니다. 감사


5

InputMethodManager에 대한 전역 변수를 선언합니다.

 private InputMethodManager im ;

onCreate () 아래에서 정의하십시오.

 im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);

oncreate () 내부의 편집 텍스트로 onClickListener를 설정합니다.

 youredittext.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT);
    }
});

작동합니다.


코드를 게시하십시오. 실행하는 동안 무엇을 얻고 있습니까?
— AndroGeek

모든 코드가 문제에 있습니다. 편집 텍스트를 클릭 할 때 화면 키패드가 표시되지 않습니다
— Housefly

에뮬레이터 또는 장치를 사용하여 이것을 테스트하고 있습니까? 에뮬레이터를 사용하여 시도하는 경우 소프트 키가 표시되지 않습니다. 장치를 사용하여 테스트하십시오. 작동합니다.
— AndroGeek

네, 테스트를 위해 장치를 사용하고 있습니다
— Housefly

흠 이상합니다. 작성한 코드, 방법을 게시 할 수 있다면 도움이 될 수 있습니다. 그렇지 않으면 위의 코드가 내 장치에서 완벽하게 작동합니다.
— AndroGeek

4

다음 코드를 사용하여 아래에 작성하십시오. onCreate()

InputMethodManager inputManager = (InputMethodManager)
                                   getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                   InputMethodManager.HIDE_NOT_ALWAYS);         
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

4

시도해보십시오 ....... 코드를 사용하여이 문제를 해결합니다.

EditText inputArea;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
inputArea = (EditText) findViewById(R.id.inputArea);

//This line is you answer.Its unable your click ability in this Edit Text
//just write
inputArea.setInputType(0);
}

기본 계산기로 아무것도 입력 할 수 없지만 어떤 문자열도 설정할 수 있습니다.

시도 해봐


3

좋은 솔루션에 대해 @AB에게 감사드립니다.

    android:focusableInTouchMode="false"

이 경우 편집 텍스트에서 키보드를 비활성화하려면 edittext 태그 라인 에 android : focusableInTouchMode = "false" 를 추가하십시오 .

Android Studio 3.0.1 minsdk 16, maxsdk26에서 나를 위해 일하십시오.


1
이 A.B답변에 대한 의견 입니까? 아니면 원래 질문에 대한 답입니까? 이것이 A.B답변에 대한 의견 인 경우 StackOverflow에서 제공하는 의견 옵션을 사용하고 원래 질문에 대한이 답변을 삭제해야합니다.
— David Walschots

해결 된 답변에 대한 답을 이해하지 못했다면 죄송합니다. 나는 내 문제를 해결하기 위해 좋은 대답에 대해 AB에게 감사한다고 말한다. 내가 틀렸다면, 나는 그 대답을 삭제할 수있다, 미안하다 @DavidWalschots.
— NZXT

2

이것을 시도하십시오 :

EditText yourEditText= (EditText) findViewById(R.id.yourEditText); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); 

닫으려면 다음을 사용할 수 있습니다.

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
 imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0); 

코드에서 다음과 같이 시도하십시오.

ed = (EditText)findViewById(R.id.editText1);

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);  

ed.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
        imm.showSoftInput(ed, InputMethodManager.SHOW_IMPLICIT);  
    }
});

이전과 동일한 방식으로 작동합니다 .... 레이아웃에서 수행해야하는 변경 사항이 있습니까 ??? 이 EditText보기에 대해 ??
— Housefly

좋아, 이제 몇 가지 레이아웃 속성을 추가 한 후에 작동합니다 ... android : clickable = "true"android : cursorVisible = "false"android : focusable = "false"감사합니다
— Housefly

no.do one thing.edittext.setOnFocusChangeListener () 메서드에서 키보드 코드 숨기기를 작성하고 시도
— user1213202

hideSoftInput 호출을 사용할시기를 정확히 지정할 수 있다면 이것이 해결책이 될 것입니다. 키보드가 자동에서 onCreate와 onResume 후에 팝업
— 엠라 아멧

2

당신이해야 할 일은 android:focusableInTouchMode="false"xml의 ​​EditText에 추가 하는 것뿐입니다 . (누군가가 여전히 쉬운 방법으로 그것을하는 방법을 알아야한다면)


2

글쎄, 나는 같은 문제가 있었고 XML 파일에서 초점을 맞출 수 있었다.

<EditText
            android:cursorVisible="false"
            android:id="@+id/edit"
            android:focusable="false"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

아마도 보안을 찾고있을 것입니다. 이것은 또한 도움이 될 것입니다.


1

onCreate()방법에 다음 코드를 사용하십시오.

    editText = (EditText) findViewById(R.id.editText);
    editText.requestFocus();
    editText.postDelayed(new Runnable() {
        public void run() {
            InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.hideSoftInputFromWindow(
                    editText.getWindowToken(), 0);
        }
    }, 200);

1

Xamarin 사용자의 경우 :

[Activity(MainLauncher = true, 
        ScreenOrientation = ScreenOrientation.Portrait, 
        WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop

1
       <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"

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

                <requestFocus/>
      </TextView>

      <EditText android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

1

Xamarin을 사용하는 경우 이것을 추가 할 수 있습니다.

Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]

그 후에 OnCreate () 메서드에이 줄을 추가 할 수 있습니다.

youredittext.ShowSoftInputOnFocus = false;

대상 장치가 위 코드를 지원하지 않는 경우 EditText 클릭 이벤트에서 아래 코드를 사용할 수 있습니다.

InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);

1

입력을 받기 위해 대화 상자를 표시하려는 코드에서 다음 패턴이 잘 작동 함을 발견했습니다 (예 : 텍스트 필드에 표시된 문자열은 대화 상자의 확인란 목록에서 선택한 결과입니다. 키보드를 통해 입력 한 텍스트).

  1. 편집 필드에서 소프트 입력 포커스를 비활성화합니다. 동일한 레이아웃에서 키보드를 사용하고 싶은 편집 필드가 있으므로 전체 활동을 비활성화 할 수 없습니다.
  2. 텍스트 필드에서 처음 클릭하면 포커스가 변경되고 반복 된 클릭은 클릭 이벤트를 생성합니다. 그래서 두 가지를 모두 재정의합니다 (여기서는 두 핸들러가 동일한 작업을 수행함을 설명하기 위해 코드를 리팩터링하지 않습니다).

    tx = (TextView) m_activity.findViewById(R.id.allergymeds);
    if (tx != null) {
        tx.setShowSoftInputOnFocus(false);
        tx.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (hasFocus) {
                    MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                    mld.setPatientId(m_sess.getActivePatientId());
                    mld.show(getFragmentManager(), "Allergy Medications Dialog");
                }
            }
        });
        tx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                mld.setPatientId(m_sess.getActivePatientId());
                mld.show(getFragmentManager(), "Allergy Medications Dialog");
            }
        });
    }
    

0

내가 만든 Android 앱 EditText에서 LinearLayout가로 로 정렬 된 세 개의 s가 있습니다. 조각이로드 될 때 소프트 키보드가 나타나지 않도록해야했습니다. 에서 설정 focusable하고 focusableInTouchModetrue 로 설정하는 것 외에도로 설정 LinearLayout해야 descendantFocusability했습니다 blocksDescendants. 에서 onCreate, 나는라고 requestFocus온LinearLayout . 이로 인해 조각이 생성 될 때 키보드가 나타나지 않았습니다.

레이아웃-

    <LinearLayout
       android:id="@+id/text_selector_container"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:weightSum="3"
       android:orientation="horizontal"
       android:focusable="true"
       android:focusableInTouchMode="true"
       android:descendantFocusability="blocksDescendants"
       android:background="@color/black">

       <!-- EditText widgets -->

    </LinearLayout>

에서 onCreate-mTextSelectorContainer.requestFocus();


0

여전히 가장 쉬운 솔루션을 찾고 있다면 true부모 레이아웃에 다음 속성을 설정하십시오.

android:focusableInTouchMode="true"

예:

<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true">

.......
......
</android.support.constraint.ConstraintLayout>

아래로 유권자, 아래로 투표하기 전에 귀하의 주장을 언급하십시오!
— Ajmal Salim

0

이것을 사용하여 EditText를 활성화 및 비활성화합니다 ....

InputMethodManager imm;

imm = (InputMethodManager)
getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);

if (isETEnable == true) {

    imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    ivWalllet.setImageResource(R.drawable.checkbox_yes);
    etWalletAmount.setEnabled(true);
    etWalletAmount.requestFocus();
    isETEnable = false;
    } 
else {

    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);
    ivWalllet.setImageResource(R.drawable.checkbox_unchecked);
    etWalletAmount.setEnabled(false);
    isETEnable = true;
    }

0

이 대답을 시도해보십시오.

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);

참고 : API 11 이상에만 해당


0
private InputMethodManager imm;

...


editText.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.onTouchEvent(event);
        hideDefaultKeyboard(v);
        return true;
    }
});

private void hideDefaultKeyboard(View et) {
  getMethodManager().hideSoftInputFromWindow(et.getWindowToken(), 0);
}

private InputMethodManager getMethodManager() {
        if (this.imm == null) {
            this.imm = (InputMethodManager)  getContext().getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
        }
  return this.imm;
}

-1

활동의 모든 textview에 대해 (또는 android : layout_width = "0dp"android : layout_height = "0dp"를 사용하여 가짜 빈 textfiew 생성) 다음 textview에 대해 android : textIsSelectable = "true"를 추가합니다.


-1

간단하고 xml 파일에서 ""태그를 제거하기 만하면됩니다.


2
이것에 대해 자세히 설명하고 예를 보여 주시겠습니까? 답변 방법을 참조하십시오 .
— 버그

-1

android:focusable="false"특히 EditText레이아웃 xml에 속성을 추가하면됩니다 . 그러면 EditText키패드 팝업없이 클릭리스트 너를 작성할 수 있습니다 .


-1

문제는 다음을 사용하여 정렬 할 수 있습니다. editText inputType을 어떤 값으로도 설정할 필요가 없습니다. 아래 줄만 추가하면됩니다. editText.setTextIsSelectable (true);


안녕하세요, 답변을 작성해 주셔서 감사합니다! 그러나 이미 여기에 너무 많은 답변이 있으므로 자체 답변을 만드는 대신 Ranjith Kumar의 답변에 대한 의견으로 실제로 이것을 작성하면 더 도움이 될 수 있습니다. 를 생략하면 어떤 효과가 있을지 언급하는 것도 흥미로울 inputType수 있습니다. 그러나 다른 답변으로 갔는지 아는 것이 좋을 것 같으 므로이 답변을 자체 답변으로 유지한다고 주장하더라도 어쨌든 거기에 댓글을 남기는 것을 고려하십시오.
— Mark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.