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, 나는라고 requestFocusLinearLayout . 이로 인해 조각이 생성 될 때 키보드가 나타나지 않았습니다.

레이아웃-

    <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.