webentwicklung-frage-antwort-db.com.de

So deaktivieren Sie das Popup der Tastatur auf edittext

In meiner App ist die erste Ansicht aller meiner Bildschirme ein EditText. Bei jedem Aufrufen eines Bildschirms wird die Bildschirmtastatur angezeigt. Wie kann ich dieses Popingup deaktivieren und aktivieren, wenn Sie manuell auf EditText klicken?

    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-Code:

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

in der dritten Ansicht (EditText) befindet sich der Fokus.

81
Housefly

Die beste Lösung liegt in der Projektmanifestdatei (AndroidManifest.xml), fügen Sie das folgende Attribut in das Konstrukt activity ein

Android: windowSoftInputMode = "stateHidden"


Beispiel:

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

Beschreibung: 

  • Der Status der Softtastatur - ob sie verborgen oder sichtbar ist -, wenn die Aktivität im Mittelpunkt der Aufmerksamkeit des Benutzers steht.
  • Die Anpassung des Hauptfensters der Aktivität - entweder, ob die Größe der Anzeige kleiner ist, um Platz für die Soft-Tastatur zu schaffen, oder ob der Inhalt schwenkt, um den aktuellen Fokus sichtbar zu machen, wenn ein Teil des Fensters von der Soft-Tastatur verdeckt wird.

Eingeführt in: 

  • API-Ebene 3

Link zu den Dokumenten

Hinweis:Die hier festgelegten Werte (außer "stateUnspecified" und "adjustUnspecified") überschreiben die im Design festgelegten Werte.

166
Skynet

Sie müssen über dem EditText eine Ansicht erstellen, die einen 'falschen' Fokus hat:

So etwas wie :

<!-- 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" />

In diesem Fall habe ich ein LinearLayout verwendet, um den Fokus abzufragen. Hoffe das hilft.

Das hat perfekt funktioniert ... dank Zaggo0

80
Housefly
     edittext.setShowSoftInputOnFocus(false);

Jetzt können Sie jede beliebige benutzerdefinierte Tastatur verwenden.

32
Matthew556

Fügen Sie folgenden Code zu Ihrer Aktivitätsklasse hinzu.

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

Die Tastatur wird eingeblendet, wenn der Benutzer auf den EditText klickt

20

Die Leute haben hier viele großartige Lösungen vorgeschlagen, aber ich habe diese einfache Technik mit meinem EditText verwendet (nichts in Java und AnroidManifest.xml ist erforderlich). Setzen Sie einfach fokussierbar und focusableInTouchMode direkt in EditText auf 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"/>

Ich beabsichtige hier, dieses Bearbeitungsfeld in der App-Sperre-Aktivität zu verwenden, in der ich den Benutzer zur Eingabe der PIN auffordert und mein benutzerdefiniertes PIN -Pad anzeigen möchte. Getestet mit minSdk = 8 und maxSdk = 23 unter Android Studio 2.1

 enter image description here

17
A.B.

Sie können folgenden Code zum Deaktivieren der OnScreen-Tastatur verwenden.

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

Zwei einfache Lösungen:

First Solutionwird unterhalb der Codezeile in der Manifest-XML-Datei hinzugefügt .. _. Fügen Sie in der Manifest-Datei (AndroidManifest.xml) das folgende Attribut im Aktivitätskonstrukt hinzu

Android: windowSoftInputMode = "stateHidden"

Beispiel:

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

Zweite Lösung fügt in der Aktivität eine Codezeile hinzu

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

Wir können jede Lösung von oben verwenden. Vielen Dank

7
kgsharathkumar

Deklarieren Sie die globale Variable für InputMethodManager:

 private InputMethodManager im ;

Definieren Sie es unter onCreate ():

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

Setzen Sie den onClickListener innerhalb von oncreate () auf diesen Bearbeitungstext:

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

Das wird funktionieren.

5
AndroGeek

versuche es ....... ich löse dieses problem mit code: -

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);
}

nichts, was Sie als Standardrechner eingeben können, außer Sie können einen beliebigen String setzen.

versuch es

4
S.M.Fazle Rabbi

Verwenden Sie den folgenden Code, schreiben Sie ihn unter 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
Dharmaraj Patil

Nun, ich hatte das gleiche Problem und bin in der XML-Datei nur fokussierbar angegangen.

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

Sie suchen wahrscheinlich auch nach Sicherheit. Das wird auch dabei helfen.

2
Divyansh

Danke an A.Abb für eine gute Lösung

    Android:focusableInTouchMode="false"

wenn Sie die Tastatur in Text bearbeiten deaktivieren, fügen Sie in diesem Fall einfach Android hinzu: focusableInTouchMode = "false" in der Edittext - Tagline.

arbeite für mich in Android Studio 3.0.1 minsdk 16, maxsdk26

2
NZXT

Versuchen Sie es damit:

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

Zum Schließen können Sie Folgendes verwenden: 

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

Versuchen Sie es so in Ihrem Code:

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);  
    }
});
2
user1213202

Verwenden Sie folgenden Code in Ihrer onCreate()-Methode.

    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
Priyanka

Wenn Sie Xamarin verwenden, können Sie dies hinzufügen

Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]

danach können Sie diese Zeile in der OnCreate () - Methode hinzufügen

youredittext.ShowSoftInputOnFocus = false;

Wenn das angezielte Gerät den obigen Code nicht unterstützt, können Sie den folgenden Code im EditText-Click-Ereignis verwenden

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

Das einzige, was Sie tun müssen, ist das Hinzufügen von Android:focusableInTouchMode="false" zum EditText in xml.

1
GoldFish

Ich habe festgestellt, dass das folgende Muster für mich gut im Code funktioniert, in dem ich ein Dialogfeld anzeigen möchte, um die Eingabe zu erhalten (z. B. ist die im Textfeld angezeigte Zeichenfolge das Ergebnis einer Auswahl aus einer Liste von Kontrollkästchen in einem Dialogfeld und nicht.) über die Tastatur eingegebener Text). 

  1. Deaktivieren Sie den Eingabefokus für das Eingabefeld. Ich kann die gesamte Aktivität nicht deaktivieren, da es Bearbeitungsfelder gibt, für die die Tastatur im selben Layout verwendet werden soll.
  2. Anfängliche Klicks im Textfeld führen zu einer Fokusänderung, ein wiederholtes Klicken bewirkt ein Klickereignis. Also überschreibe ich beide (hier überarbeite ich den Code nicht, um zu zeigen, dass beide Handler dasselbe tun):

    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");
            }
        });
    }
    
1
slogan621

Für Xamarin-Benutzer:

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

Versuchen Sie diese Antwort, 

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

Hinweis: nur für API 11+

0
Ranjith Kumar

In einer Android-App, die ich gerade baute, hatte ich drei EditTexts in einer LinearLayout, die horizontal angeordnet waren. Ich musste verhindern, dass die Soft-Tastatur angezeigt wurde, als das Fragment geladen wurde. Zusätzlich zu focusable und focusableInTouchMode für LinearLayout muss der Wert descendantFocusability auf blocksDescendants gesetzt werden. In onCreate habe ich requestFocus für die LinearLayout aufgerufen. Dadurch wurde verhindert, dass die Tastatur angezeigt wird, wenn das Fragment erstellt wird. 

Layout - 

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

In onCreate - mTextSelectorContainer.requestFocus();

0
indyfromoz
       <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"/>
0
NickUnuchek

Verwenden Sie diese Option, um EditText zu aktivieren und zu deaktivieren.

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;
    }

Einfach "" entfernen Sie das Tag aus der XML-Datei

0
Jeyanth
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;
}
0
Denis Raison

Wenn noch jemand nach der einfachsten Lösung sucht, setzen Sie das folgende Attribut in Ihrem übergeordneten Layout auf true

Android:focusableInTouchMode="true"

Beispiel:

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

.......
......
</Android.support.constraint.ConstraintLayout>
0
Ajmal Salim

Es kann mit .__ sortiert werden. Es ist nicht erforderlich, editText inputType auf Werte zu setzen Fügen Sie einfach die folgende Zeile hinzu. EditText.setTextIsSelectable (true);

0
arun