wake-up-neo.net

Android: EditText zum Entfernen des Fokus zwingen?

Ich möchte den Fokus aus dem EditText entfernen können. Wenn zum Beispiel die Tastatur angezeigt wird und der Benutzer sie mit der Zurück-Taste verbirgt, möchten wir, dass der Fokus und der Cursor verschwinden. Wie geht das?

326
Alex1987

Sie können dies zu onCreate hinzufügen, und die Tastatur wird bei jedem Start der Aktivität ausgeblendet.

Sie können den Fokus auch programmgesteuert auf ein anderes Element ändern.

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
244
Wayner

Sie können Cursor und Fokus verschwinden lassen, indem Sie

edittext.clearFocus();

Erkennen Sie jedoch, wann das Verstecken der Tastatur eine harte Arbeit ist.

311
xtr

Fügen Sie LinearLayout vor EditText in Ihre XML ein.

<LinearLayout 
    Android:focusable="true"
    Android:focusableInTouchMode="true" 
    Android:clickable="true"
    Android:layout_width="0px"
    Android:layout_height="0px" />

Oder Sie können dasselbe tun, indem Sie diese Zeilen vor Ihrem 'EditText' anzeigen.

<Button
    Android:id="@+id/btnSearch"
    Android:layout_width="50dp"
    Android:layout_height="50dp"
    Android:focusable="true"
    Android:focusableInTouchMode="true"
    Android:gravity="center"
    Android:text="Quick Search"
    Android:textColor="#fff"
    Android:textSize="13sp"
    Android:textStyle="bold" />

<EditText
    Android:id="@+id/edtSearch"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_centerVertical="true"
    Android:layout_marginRight="5dp"
    Android:gravity="left"
    Android:hint="Name"
    Android:maxLines="1"
    Android:singleLine="true"
    Android:textColorHint="@color/blue"
    Android:textSize="13sp"
    Android:textStyle="bold" />
145
Singh Arjun

Fokus entfernen, aber fokussierbar bleiben:

editText.setFocusableInTouchMode(false);
editText.setFocusable(false);
editText.setFocusableInTouchMode(true);
editText.setFocusable(true);

EditText verliert den Fokus, kann ihn jedoch bei einem neuen Berührungsereignis wieder erlangen.

89
Paschalis

entfernen Autofokus Edittext Android

Es funktioniert für mich

Bearbeiten In dem Link wird die Verwendung von LinearLayout vorgeschlagen, aber die einfache Ansicht funktioniert

<View
    Android:id="@+id/focus_thief"
    Android:layout_width="1dp"
    Android:layout_height="1dp"
    Android:focusable="true"
    Android:focusableInTouchMode="true" />

Wenn dieser "Dieb" dann am oberen Rand des Layouts platziert wird (um das erste fokussierbare Objekt zu sein), funktionieren die Aufrufe von clearFocus().

68
sondt87

Fügen Sie diese beiden Eigenschaften Ihrem übergeordneten Layout hinzu (z. B. Lineares Layout, Relatives Layout).

Android:focusable="true"
Android:focusableInTouchMode="true" 

Es wird den Trick machen :)

51
King of Masses

Sie können auch Android: windowSoftInputMode = "stateAlwaysHidden" in Ihren Manifest-Aktionsabschnitt aufnehmen.

Dies ist äquivalent zu:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

aber auf XML Weise.

Zu Ihrer Information, Sie können die Tastatur auch mit Codes ausblenden:

// hide virtual keyboard
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0);
30
Jarod DY Law

versuchen Sie, dies für Ihre Ansicht zu verwenden. Es hat bei mir funktioniert:

<View
    Android:id="@+id/fucused"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:focusable="true"
    Android:focusableInTouchMode="true"/>
20
ediBersh

du musst <requestFocus/> entfernen

wenn du es nicht benutzt und trotzdem das selbe problem

benutzer LinearLayout als übergeordnetes Element und Gruppe

Android:focusable="true"
Android:focusableInTouchMode="true"

Hoffe es hilft dir.

18
Mohamed Hussien

Um die Tastatur zu Beginn der Aktivität auszublenden, schreiben Sie den folgenden Code in onCreate ().

InputMethodManager imm = (InputMethodManager)
getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);

So löschen Sie den Fokus und entfernen den Cursor aus edittext .....

editText.clearFocus();

editText.setCursorVisible(false);
17
Pratibha Sarode

Fügen Sie Ihrem übergeordneten Layout hinzu, wo Sie Ihr EditText dieses Android:focusableInTouchMode="true" abgelegt haben.

17
Context

Dies ist meine allererste Antwort auf SO. Seien Sie also nicht zu scharf auf mich, wenn es Fehler gibt. : D

Es gibt nur wenige Antworten in der SO, aber ich habe das Bedürfnis, meine vollständige Lösung zu veröffentlichen, weil mich das verrückt gemacht hat. Ich habe mir überall Kleinigkeiten geschnappt, also verzeih mir, wenn ich nicht jedem die entsprechenden Credits gebe ... :)

(Ich werde mein Ergebnis vereinfachen, da meine Ansicht zu viele Elemente enthält und ich damit keinen Spam senden möchte, und ich werde versuchen, es so allgemein wie möglich zu gestalten ...)

Für Ihr Layout benötigen Sie ein übergeordnetes Element, das in Ihrer EditText- und übergeordneten Ansicht wie folgt definiert ist:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" 
              Android:orientation="vertical"
              Android:layout_width="match_parent" 
              Android:layout_height="match_parent"
              Android:id="@+id/lytContainer"
              Android:descendantFocusability="beforeDescendants"
              Android:focusableInTouchMode="true">
<EditText Android:layout_width="fill_parent" 
              Android:layout_height="wrap_content" 
              Android:id="@+id/etEditor"
              Android:inputType="number"
              Android:layout_gravity="center" 
              Android:hint="@string/enter_your_text"
              Android:textColor="@Android:color/darker_gray" 
              Android:textSize="12dp"
              Android:textAlignment="center" 
              Android:gravity="center" 
              Android:clickable="true"/>
</LinearLayout>

Also brauchte ich hier ein paar Dinge. Ich brauchte einen Platzhalter für meinen EditText - das ist das -

Android: hint = "hint"

Ebenfalls,

Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"

es wurde dafür gesorgt, dass EditText nicht auf die Eingabe der Aktivität und später in der Aktivität fokussiert ist selbst beim Setzen dieser Einstellung hilft Ihnen, onTouchListener darauf zu setzen, um den Fokus von EditText wegzunehmen .

Nun in der Aktivität:

package com.at.keyboardhide;

import Android.app.Activity;
import Android.content.Context;
import Android.os.Bundle;
import Android.view.MotionEvent;
import Android.view.View;
import Android.view.WindowManager;
import Android.view.View.OnTouchListener;
import Android.view.inputmethod.InputMethodManager;
import Android.widget.EditText;
import Android.widget.LinearLayout;

public class MainActivity extends Activity implements OnTouchListener{
private EditText getEditText;
private LinearLayout getLinearLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    setContentView(R.layout.keyboardmain);
    getEditText = (EditText)findViewById(R.id.etEditor);
    getLinearLayout = (LinearLayout)findViewById(R.id.lytContainer);
    getLinearLayout.setOnTouchListener(this);

    getEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                Log.d("EDTA", "text was entered.");
                getEditText.clearFocus();
                imm.hideSoftInputFromWindow(barcodeNo.getWindowToken(), 0);
                return true;
            }
            return false;
        }
    });
}
@Override
public boolean onTouch(View v, MotionEvent event) {
    if(v==getLinearLayout){
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0);
        getEditText.clearFocus();
        return true;
        }
    return false;
    }
}

Einige der Antworten für Bits, die ich auf dieser Fragenseite gefunden habe, und der Teil mit der Aktivitätslösung, den ich auf dieser Seite gefunden habe Blog . Der Rest, den ich verpasste und den ich selbst herausfinden musste, bestand darin, mich auf den EditText zu konzentrieren, den ich sowohl im setOnEditorActionListener als auch im hinzufügte onTouchLister für die (= /// =) übergeordnete Ansicht .

Hoffe das hilft jemandem und spart deren Zeit. :)

Prost, Z.

10
zed

In den Kommentaren haben Sie gefragt, ob anstelle des EditText eine andere Ansicht fokussiert werden kann. Ja, kann es. Verwenden Sie die .requestFocus() -Methode für die Ansicht, auf die Sie zu Beginn fokussieren möchten (in der onCreate () -Methode).

Durch Fokussieren auf eine andere Ansicht wird eine gewisse Menge Code ausgeschnitten. (Code zum Ausblenden der Tastatur zum Beispiel)

6

Ich hatte das gleiche problem Es hat mich mehr als verrückt gemacht.

Ich hatte einen erweiterten Dialog mit einer ScrollView, die ein TableLayout mit erweitertem LinearLayout hatte, das eine SeekBar und einen EditText enthielt.

Der erste EditText hatte immer Autofokus, nachdem der Dialog angezeigt und der Text über die Tastatur bearbeitet wurde. Der EditText hatte weiterhin den Fokus und die Tastatur war weiterhin sichtbar.

Ich habe fast alle Lösungen dieses Threads ausprobiert und keine hat für mich funktioniert.

Also hier mein einfache Lösung: (text = EditText)

text.setOnEditorActionListener( new OnEditorActionListener( ){
    public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){
        if( (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) ||
            (actionId == EditorInfo.IME_ACTION_DONE) ){
            text.clearFocus( );
            InputMethodManager iMgr = null;
            iMgr = (InputMethodManager)mContext.getSystemService( Context.INPUT_METHOD_SERVICE );
            iMgr.hideSoftInputFromWindow( text.getWindowToken(), 0 );
        }
        return true;
    }
});

Übrigens habe ich nicht eines der folgenden Schnipsel benutzt, um es zu lösen:

//setFocusableInTouchMode( true )
//setFocusable( true )
//setDescendantFocusability( ViewGroup.FOCUS_BEFORE_DESCENDANTS )

AND I hat es nicht getan benutzte ein Spacer Item wie ein View mit einer Breite und Höhe von 1dp.

Hoffentlich hilft es jemandem: D

4
Pixtar

Sie können auch Android:windowSoftInputMode="stateAlwaysHidden" in Ihren Abschnitt für Manifestaktionen aufnehmen.

Dies ist äquivalent zu:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
3
user2471325
editText.setFocusableInTouchMode(true)

Das EditText kann den Fokus erhalten, wenn der Benutzer es berührt. Wenn das Hauptlayout (Aktivität, Dialogfeld usw.) sichtbar wird, erhält EditText nicht automatisch den Fokus, obwohl es die erste Ansicht im Layout ist.

2
Fabio Mitrano
EditText.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View view, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); 
                    EditText.setFocusable(false);
                    EditText.setFocusableInTouchMode(true);
                    return true;
                } else {
                    return false;
                }
            }
        });
2
Abhi

Sie können den Fokus auf Ihre Elemente vermeiden, indem Sie das Attribut Android: descendantFocusability des übergeordneten Elements festlegen.

Hier ist ein Beispiel:

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/search__scroller"
Android:descendantFocusability="blocksDescendants"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true" >
</ScrollView>

Hier blockiert das auf "blocksDescendants" gesetzte Attribut "Android: descendantFocusability" den Fokus auf die untergeordneten Elemente.

Weitere Informationen finden Sie hier .

0
podpo