webentwicklung-frage-antwort-db.com.de

Wie versteckt man die Soft-Tastatur auf Android, nachdem man außerhalb von EditText geklickt hat

Ok, jeder weiß das, um eine Tastatur zu verbergen, die Sie implementieren müssen:

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

Die große Sache hier ist jedoch, wie die Tastatur ausgeblendet wird, wenn der Benutzer eine andere Stelle berührt oder auswählt, die keine EditText oder das SoftKeyboard ist.

Ich habe versucht, die onTouchEvent() für meine übergeordnete Activity zu verwenden. Dies funktioniert jedoch nur, wenn der Benutzer außerhalb einer anderen Ansicht berührt und es keine Scrollansicht gibt.

Ich habe versucht, einen Touch-, Click- und Focus-Listener ohne Erfolg zu implementieren.

Ich habe sogar versucht, meine eigene Scrollansicht zu implementieren, um Berührungsereignisse abzufangen, aber ich kann nur die Koordinaten des Ereignisses und nicht die angeklickte Ansicht erhalten.

Gibt es eine Standardmethode dafür? im iPhone war das wirklich einfach.

300
htafoya

Der folgende Ausschnitt verdeckt einfach die Tastatur:

public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = 
        (InputMethodManager) activity.getSystemService(
            Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(
        activity.getCurrentFocus().getWindowToken(), 0);
}

Sie können dies in einer Utility-Klasse ablegen oder, wenn Sie es innerhalb einer Aktivität definieren, den Aktivitätsparameter vermeiden oder hideSoftKeyboard(this) aufrufen.

Am schwierigsten ist es, wenn man es nennt. Sie können eine Methode schreiben, die jede View in Ihrer Aktivität durchläuft, und prüfen, ob es sich um einen instanceof EditText handelt, wenn keine setOnTouchListener für diese Komponente registriert ist und alles passt. Für den Fall, dass Sie sich fragen, wie das geht, ist es eigentlich ganz einfach. Hier ist, was Sie tun, Sie schreiben eine rekursive Methode wie die folgende, tatsächlich können Sie diese Funktion verwenden, um beliebige Einstellungen vorzunehmen, wie z. B. das Anlegen benutzerdefinierter Schriften usw. ... Hier ist die Methode

public void setupUI(View view) {

    // Set up touch listener for non-text box views to hide keyboard.
    if (!(view instanceof EditText)) {
        view.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(MyActivity.this);
                return false;
            }
        });
    }

    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            View innerView = ((ViewGroup) view).getChildAt(i);
            setupUI(innerView);
        }
    }
}

Das ist alles, rufen Sie einfach diese Methode nach setContentView in Ihrer Aktivität auf. Falls Sie sich fragen, welchen Parameter Sie übergeben möchten, ist dies die Variable id des übergeordneten Containers. Weisen Sie Ihrem übergeordneten Container eine id zu

<RelativeLayoutPanel Android:id="@+id/parent"> ... </RelativeLayout>

und rufen Sie setupUI(findViewById(R.id.parent)) auf, das ist alles.

Wenn Sie dies effektiv verwenden möchten, können Sie eine erweiterte Activity erstellen, diese Methode einfügen und alle anderen Aktivitäten in Ihrer Anwendung dazu veranlassen, diese Aktivität zu erweitern und ihre setupUI() in der onCreate()-Methode aufzurufen.

Ich hoffe es hilft.

Wenn Sie mehr als eine Aktivität verwenden, definieren Sie die allgemeine ID für das übergeordnete Layout wie <RelativeLayout Android:id="@+id/main_parent"> ... </RelativeLayout>.

Erweitern Sie dann eine Klasse aus Activity und definieren Sie setupUI(findViewById(R.id.main_parent)) innerhalb ihrer OnResume() und erweitern Sie diese Klasse anstelle von `` Activityin your program

534
Navneeth G

Sie können dies durch folgende Schritte erreichen:

  1. Machen Sie die übergeordnete Ansicht (Inhaltsansicht Ihrer Aktivität) anklickbar und fokussierbar, indem Sie die folgenden Attribute hinzufügen

        Android:clickable="true" 
        Android:focusableInTouchMode="true" 
    
  2. Implementieren Sie eine hideKeyboard () -Methode

        public void hideKeyboard(View view) {
            InputMethodManager inputMethodManager =(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    
  3. Legen Sie zum Schluss den onFocusChangeListener Ihres Edittext fest.

        edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    hideKeyboard(v);
                }
            }
        });
    

Wie in einem der folgenden Kommentare hervorgehoben, funktioniert dies möglicherweise nicht, wenn die übergeordnete Ansicht eine Bildlaufansicht ist. In diesem Fall kann der anklickbare und der focusableInTouchMode in der Ansicht direkt unter der ScrollView hinzugefügt werden.

235
vida

Ich finde die akzeptierte Antwort etwas kompliziert.

Hier ist meine Lösung. Fügen Sie Ihrem Hauptlayout eine OnTouchListener hinzu:

findViewById(R.id.mainLayout).setOnTouchListener(this)

und fügen Sie den folgenden Code in die onTouch-Methode ein.

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

Auf diese Weise müssen Sie nicht alle Ansichten durchlaufen.

51
roepit

Ich habe eine weitere Lösung zum Ausblenden der Tastatur erhalten:

InputMethodManager imm = (InputMethodManager) getSystemService(
    Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

Hier übergeben Sie HIDE_IMPLICIT_ONLY an der Position von showFlag und 0 an der Position von hiddenFlag..__ und schließen die Soft-Tastatur mit Gewalt.

36
Saurabh Pareek

Nun, ich schaffe es, das Problem etwas zu lösen. Ich überschreibe das dispatchTouchEvent bei meiner Aktivität. Dort verwende ich Folgendes, um die Tastatur auszublenden.

 /**
 * Called to process touch screen events. 
 */
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    switch (ev.getAction()){
        case MotionEvent.ACTION_DOWN:
            touchDownTime = SystemClock.elapsedRealtime();
            break;

        case MotionEvent.ACTION_UP:
            //to avoid drag events
            if (SystemClock.elapsedRealtime() - touchDownTime <= 150){  

                EditText[] textFields = this.getFields();
                if(textFields != null && textFields.length > 0){

                    boolean clickIsOutsideEditTexts = true;

                    for(EditText field : textFields){
                        if(isPointInsideView(ev.getRawX(), ev.getRawY(), field)){
                            clickIsOutsideEditTexts = false;
                            break;
                        }
                    }

                    if(clickIsOutsideEditTexts){
                        this.hideSoftKeyboard();
                    }               
                } else {
                    this.hideSoftKeyboard();
                }
            }
            break;
    }

    return super.dispatchTouchEvent(ev);
}

EDIT: Die Methode getFields () ist nur eine Methode, die ein Array mit den Textfeldern in der Ansicht zurückgibt. Um zu vermeiden, dass dieses Array bei jeder Berührung erstellt wird, habe ich ein statisches Array mit dem Namen sFields erstellt, das von der getFields () -Methode zurückgegeben wird. Dieses Array wird mit den onStart () -Methoden initialisiert, z.

sFields = new EditText[] {mUserField, mPasswordField};


Es ist nicht perfekt. Die Drag-Event-Zeit basiert nur auf Heuristiken, sodass sie sich bei langen Klicks manchmal nicht verdeckt. Außerdem wurde eine Methode erstellt, mit der alle editTexts pro Ansicht abgerufen werden. Andernfalls wird die Tastatur ausgeblendet und beim Klicken auf einen anderen EditText angezeigt.

Sauberere und kürzere Lösungen sind jedoch willkommen

16
htafoya

Verwenden Sie OnFocusChangeListener .

Zum Beispiel:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            hideKeyboard();
        }
    }
});

Update: Sie können auch onTouchEvent() in Ihrer Aktivität überschreiben und die Koordinaten der Berührung überprüfen. Wenn sich Koordinaten außerhalb von EditText befinden, blenden Sie die Tastatur aus.

13
Sergey Glotov

Ich habe dispatchTouchEvent in Activity dafür implementiert:

private EditText mEditText;
private Rect mRect = new Rect();
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    final int action = MotionEventCompat.getActionMasked(ev);

    int[] location = new int[2];
    mEditText.getLocationOnScreen(location);
    mRect.left = location[0];
    mRect.top = location[1];
    mRect.right = location[0] + mEditText.getWidth();
    mRect.bottom = location[1] + mEditText.getHeight();

    int x = (int) ev.getX();
    int y = (int) ev.getY();

    if (action == MotionEvent.ACTION_DOWN && !mRect.contains(x, y)) {
        InputMethodManager input = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        input.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
    }
    return super.dispatchTouchEvent(ev);
}

und ich habe es getestet, funktioniert perfekt!

12
Jishi Chen

Überschreibt public boolean dispatchTouchEvent (MotionEvent-Ereignis) in einer beliebigen Aktivität (oder erweitert die Aktivitätsklasse).

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    View view = getCurrentFocus();
    boolean ret = super.dispatchTouchEvent(event);

    if (view instanceof EditText) {
        View w = getCurrentFocus();
        int scrcoords[] = new int[2];
        w.getLocationOnScreen(scrcoords);
        float x = event.getRawX() + w.getLeft() - scrcoords[0];
        float y = event.getRawY() + w.getTop() - scrcoords[1];

        if (event.getAction() == MotionEvent.ACTION_UP 
 && (x < w.getLeft() || x >= w.getRight() 
 || y < w.getTop() || y > w.getBottom()) ) { 
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
        }
    }
 return ret;
}

Und das ist alles was Sie tun müssen

10
Hoang Trinh

Ich bin mir bewusst, dass dieser Thread ziemlich alt ist, die richtige Antwort scheint gültig zu sein und es gibt viele funktionierende Lösungen, aber ich denke, dass der unten angegebene Ansatz einen zusätzlichen Nutzen in Bezug auf Effizienz und Eleganz haben könnte.

Ich brauche dieses Verhalten für alle meine Aktivitäten, also habe ich eine Klasse CustomActivity erben aus der Klasse Activity erstellt und die dispatchTouchEvent - Funktion "süchtig" gemacht. Es sind hauptsächlich zwei Bedingungen zu beachten:

  1. Wenn der Fokus unverändert bleibt und jemand außerhalb des aktuellen Eingabefelds antippt, schließen Sie den IME
  2. Wenn sich der Fokus geändert hat und das nächste fokussierte Element keine Instanz eines Eingabefelds ist, schließen Sie den IME

Das ist mein Ergebnis:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if(ev.getAction() == MotionEvent.ACTION_UP) {
        final View view = getCurrentFocus();

        if(view != null) {
            final boolean consumed = super.dispatchTouchEvent(ev);

            final View viewTmp = getCurrentFocus();
            final View viewNew = viewTmp != null ? viewTmp : view;

            if(viewNew.equals(view)) {
                final Rect rect = new Rect();
                final int[] coordinates = new int[2];

                view.getLocationOnScreen(coordinates);

                rect.set(coordinates[0], coordinates[1], coordinates[0] + view.getWidth(), coordinates[1] + view.getHeight());

                final int x = (int) ev.getX();
                final int y = (int) ev.getY();

                if(rect.contains(x, y)) {
                    return consumed;
                }
            }
            else if(viewNew instanceof EditText || viewNew instanceof CustomEditText) {
                return consumed;
            }

            final InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

            inputMethodManager.hideSoftInputFromWindow(viewNew.getWindowToken(), 0);

            viewNew.clearFocus();

            return consumed;
        }
    }       

    return super.dispatchTouchEvent(ev);
}

Randbemerkung: Zusätzlich weise ich diese Attribute der Stammansicht zu. Dadurch kann der Fokus auf jedes Eingabefeld gelöscht werden, und Eingabefelder werden nicht beim Start der Aktivität fokussiert (der Inhalt wird zum "Fokus-Fänger"):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final View view = findViewById(R.id.content);

    view.setFocusable(true);
    view.setFocusableInTouchMode(true);
}
8
fje

Ich habe die Lösung von Andre Luis IM modifiziert. Ich habe folgende erreicht:

Ich habe eine Utility-Methode erstellt, mit der die Soft-Tastatur auf die gleiche Weise wie Andre Luiz IM ausgeblendet wird:

public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

Aber anstatt für jede Ansicht einen OnTouchListener zu registrieren, der eine schlechte Leistung bringt, habe ich den OnTouchListener nur für die Root-Ansicht registriert. Da das Ereignis blubbert, bis es verbraucht ist (EditText ist eine der Ansichten, in denen es standardmäßig verwendet wird). Wenn es in der Stammansicht ankommt, liegt es daran, dass es nicht verbraucht wurde.

findViewById(Android.R.id.content).setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Utils.hideSoftKeyboard(activity);
        return false;
    }
});
7

Ich mochte den Aufruf von dispatchTouchEvent von htafoya, aber:

  • Ich habe den Timer-Teil nicht verstanden (weiß nicht, warum die Messung der Ausfallzeit notwendig sein sollte?)
  • Ich mag es nicht, alle EditTexte mit jeder Ansichtsänderung zu registrieren/die Registrierung aufzuheben (dies kann eine Menge von Viewchanges und Edittexts in komplexen Hierarchien sein).

Also habe ich diese etwas einfachere Lösung gemacht:

@Override
public boolean dispatchTouchEvent(final MotionEvent ev) {
    // all touch events close the keyboard before they are processed except EditText instances.
    // if focus is an EditText we need to check, if the touchevent was inside the focus editTexts
    final View currentFocus = getCurrentFocus();
    if (!(currentFocus instanceof EditText) || !isTouchInsideView(ev, currentFocus)) {
        ((InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE))
            .hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
    return super.dispatchTouchEvent(ev);
}

/**
 * determine if the given motionevent is inside the given view.
 * 
 * @param ev
 *            the given view
 * @param currentFocus
 *            the motion event.
 * @return if the given motionevent is inside the given view
 */
private boolean isTouchInsideView(final MotionEvent ev, final View currentFocus) {
    final int[] loc = new int[2];
    currentFocus.getLocationOnScreen(loc);
    return ev.getRawX() > loc[0] && ev.getRawY() > loc[1] && ev.getRawX() < (loc[0] + currentFocus.getWidth())
        && ev.getRawY() < (loc[1] + currentFocus.getHeight());
}

Es gibt einen Nachteil:

Wenn Sie von einer EditText zu einer anderen EditText wechseln, wird die Tastatur ausgeblendet und neu angezeigt. In meinem Fall ist dies auf diese Weise erwünscht, da Sie sehen, dass Sie zwischen zwei Eingabekomponenten gewechselt haben.

6
Christian R.

Ein weiterer Kotlin & Material Design Weg mit TextInputEditText (dieser Ansatz ist auch kompatibel mit EditTextView ) ...

1. Machen Sie die übergeordnete Ansicht (Inhaltsansicht Ihrer Aktivität/Ihres Fragments) anklickbar und fokussierbar, indem Sie die folgenden Attribute hinzufügen

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

2.Erstellen Sie eine Erweiterung für alle View (beispielsweise in einer ViewExtension.kt-Datei):

fun View.hideKeyboard(){
    val inputMethodManager = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(this.windowToken, 0)
}

3.Erstellen Sie einen BaseTextInputEditText, der TextInputEditText erbt. Implementieren Sie die Methode onFocusChanged, um die Tastatur auszublenden, wenn die Ansicht nicht fokussiert ist:

class BaseTextInputEditText(context: Context?, attrs: AttributeSet?) : TextInputEditText(context, attrs){
    override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect)
        if (!focused) this.hideKeyboard()
    }
}

4. Rufen Sie einfach Ihre brandneue benutzerdefinierte Ansicht in Ihrem XML an: 

<Android.support.design.widget.TextInputLayout
        Android:id="@+id/textInputLayout"
        ...>

        <com.your_package.BaseTextInputEditText
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            ... />

    </Android.support.design.widget.TextInputLayout> 

Das ist alles. Sie müssen Ihre Controller (Fragment oder Aktivität) nicht ändern, um diesen sich wiederholenden Fall zu behandeln.

5
Phil

Klagegrund: Ich erkenne, dass ich keine Schlagkraft habe, aber bitte nehmen Sie meine Antwort ernst.

Problem: Weiche Tastatur schließen, wenn Sie nicht auf die Tastatur klicken oder Text mit minimalem Code bearbeiten.

Lösung: Externe Bibliothek, bekannt als Buttermesser.

One Line Solution:

@OnClick(R.id.activity_signup_layout) public void closeKeyboard() { ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); }

Mehr lesbare Lösung:

@OnClick(R.id.activity_signup_layout) 
public void closeKeyboard() {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}

Erläuterung: Binden Sie OnClick Listener an die übergeordnete ID des XML-Layouts der Aktivität, sodass jeder Klick auf das Layout (nicht auf den Bearbeitungstext oder die Tastatur) dies ausführt Code-Schnipsel, das die Tastatur verdeckt.

Beispiel: Wenn Ihre Layoutdatei R.layout.my_layout lautet und Ihre Layout-ID R.id.my_layout_id lautet, sollte Ihr Butterknife-Bind-Aufruf folgendermaßen aussehen:

(@OnClick(R.id.my_layout_id) 
public void yourMethod {
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}

Butterknife Documentation Link: http://jakewharton.github.io/butterknife/

Stecker: Butterknife wird Ihre Android) - Entwicklung revolutionieren. Betrachten Sie es.

Hinweis: Das gleiche Ergebnis kann ohne die Verwendung der externen Bibliothek Butterknife erzielt werden. Setzen Sie einfach einen OnClickListener auf das übergeordnete Layout, wie oben beschrieben.

5
Charles Woodson

Hier ist eine weitere Variante der Antwort von fje, die die von sosite aufgeworfenen Probleme anspricht.

Die Idee hierbei ist, sowohl die Down- als auch die Up-Aktionen in der dispatchTouchEvent-Methode der Aktivität auszuführen. Bei der Abwärtsaktion notieren wir die aktuell fokussierte Ansicht (falls vorhanden) und ob sich die Berührung darin befand, und speichert beide Informationen für später.

Bei der Aufwärtsaktion werden wir zuerst abschicken, damit eine andere Ansicht möglicherweise den Fokus erhält. Wenn danach die aktuell fokussierte Ansicht die ursprünglich fokussierte Ansicht ist und der Abwärtskontakt innerhalb dieser Ansicht war, lassen wir die Tastatur geöffnet.

Wenn die aktuell fokussierte Ansicht anders ist als die ursprünglich fokussierte Ansicht und eine EditText, lassen wir auch die Tastatur geöffnet.

Ansonsten schließen wir es.

Zusammenfassend funktioniert dies wie folgt:

  • beim Berühren eines aktuell fokussierten EditText bleibt die Tastatur geöffnet
  • beim Wechsel von einem fokussierten EditText zu einem anderen EditText bleibt die Tastatur geöffnet (schließt/öffnet nicht wieder)
  • wenn Sie eine beliebige Stelle außerhalb eines aktuell fokussierten EditText berühren, bei dem es sich nicht um einen anderen EditText handelt, wird die Tastatur geschlossen
  • durch langes Drücken von EditText zum Aufrufen der kontextabhängigen Aktionsleiste (mit den Schaltflächen Ausschneiden/Kopieren/Einfügen) bleibt die Tastatur geöffnet, obwohl die UP-Aktion außerhalb der fokussierten EditText-Funktion (die sich nach unten bewegt hat, um Platz für die TAXI). Beachten Sie jedoch, dass die Tastatur geschlossen wird, wenn Sie im CAB auf eine Schaltfläche tippen. Das kann wünschenswert sein oder nicht; Wenn Sie aus einem Feld ausschneiden/kopieren und in ein anderes einfügen möchten, wäre dies der Fall. Wenn Sie wieder in dasselbe EditText einfügen möchten, wäre dies nicht der Fall.
  • wenn sich der fokussierte EditText am unteren Rand des Bildschirms befindet und Sie einen Text lang anklicken, um ihn auszuwählen, behält der EditText den Fokus und die Tastatur öffnet sich nach Belieben, da wir die Option "Berührung innerhalb der Sichtbereiche" auf dem Bildschirm überprüfen Down-Action, nicht die Up-Action.

    private View focusedViewOnActionDown;
    private boolean touchWasInsideFocusedView;
    
    
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                focusedViewOnActionDown = getCurrentFocus();
                if (focusedViewOnActionDown != null) {
                    final Rect rect = new Rect();
                    final int[] coordinates = new int[2];
    
                    focusedViewOnActionDown.getLocationOnScreen(coordinates);
    
                    rect.set(coordinates[0], coordinates[1],
                            coordinates[0] + focusedViewOnActionDown.getWidth(),
                            coordinates[1] + focusedViewOnActionDown.getHeight());
    
                    final int x = (int) ev.getX();
                    final int y = (int) ev.getY();
    
                    touchWasInsideFocusedView = rect.contains(x, y);
                }
                break;
    
            case MotionEvent.ACTION_UP:
    
                if (focusedViewOnActionDown != null) {
                    // dispatch to allow new view to (potentially) take focus
                    final boolean consumed = super.dispatchTouchEvent(ev);
    
                    final View currentFocus = getCurrentFocus();
    
                    // if the focus is still on the original view and the touch was inside that view,
                    // leave the keyboard open.  Otherwise, if the focus is now on another view and that view
                    // is an EditText, also leave the keyboard open.
                    if (currentFocus.equals(focusedViewOnActionDown)) {
                        if (touchWasInsideFocusedView) {
                            return consumed;
                        }
                    } else if (currentFocus instanceof EditText) {
                        return consumed;
                    }
    
                    // the touch was outside the originally focused view and not inside another EditText,
                    // so close the keyboard
                    InputMethodManager inputMethodManager =
                            (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.hideSoftInputFromWindow(
                        focusedViewOnActionDown.getWindowToken(), 0);
                    focusedViewOnActionDown.clearFocus();
    
                    return consumed;
                }
                break;
        }
    
        return super.dispatchTouchEvent(ev);
    }
    
3
Andy Dennie

Ich finde das akzeptierte Antwortbit für diese einfache Anforderung komplex. Hier ist was für mich ohne Fehler funktioniert. 

findViewById(R.id.mainLayout).setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            return false;
        }
    });
3
Joohay

es ist zu einfach, machen Sie einfach Ihr aktuelles Layout durch diesen Code fokussierbar:

Android:id="@+id/loginParentLayout"
Android:clickable="true"
Android:focusableInTouchMode="true"

schreiben Sie dann eine Methode und einen OnClickListner für dieses Layout, so dass beim Berühren des obersten Layouts an einer beliebigen Stelle eine Methode aufgerufen wird, in der Sie Code zum Abschließen der Tastatur schreiben. Folgendes ist der Code für beide; // Sie müssen dies in OnCreate () schreiben.

 yourLayout.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view) {
                    hideKeyboard(view);
                }
            });

von listner aufgerufene Methode: -

 public void hideKeyboard(View view) {
     InputMethodManager imm =(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
3
swarnim dixit

Methode zum Anzeigen/Ausblenden der Soft-Tastatur

InputMethodManager inputMethodManager = (InputMethodManager) currentActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
    if (isShow) {
        if (currentActivity.getCurrentFocus() == null) {
            inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        } else {
            inputMethodManager.showSoftInput(currentActivity.getCurrentFocus(), InputMethodManager.SHOW_FORCED);    
        }

    } else {
        if (currentActivity.getCurrentFocus() == null) {
            inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
        } else {
            inputMethodManager.hideSoftInputFromInputMethod(currentActivity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);    
        }

    }

Ich hoffe, dass sie nützlich waren

3
lalosoft

Ich habe die Methode verfeinert, den folgenden Code in eine UI-Dienstprogrammklasse eingefügt (vorzugsweise, nicht notwendigerweise), damit auf alle Ihre Activity- oder Fragment-Klassen zugegriffen werden kann, um ihren Zweck zu erfüllen.

public static void serachAndHideSoftKeybordFromView(View view, final Activity act) {
    if(!(view instanceof EditText)) {
        view.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(act);
                return false;
            }
        });
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            View nextViewInHierarchy = ((ViewGroup) view).getChildAt(i);
            serachAndHideSoftKeybordFromView(nextViewInHierarchy, act);
        }
    }
}
public static void hideSoftKeyboard (Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

Dann sagen Sie zum Beispiel, Sie müssen es aus Aktivität aufrufen, rufen Sie es wie folgt auf;

UIutils.serachAndHideSoftKeybordFromView(findViewById(Android.R.id.content), YourActivityName.this);

Beachten 

findViewById (Android.R.id.content)

Dies gibt uns die Root-Ansicht der aktuellen Gruppe (Sie dürfen die ID nicht in der Root-Ansicht festgelegt haben).

Prost :)

2
Uzair

In Kotlin können wir Folgendes tun. Sie müssen nicht alle Ansichten durchlaufen. Es wird auch für Fragmente funktionieren.

override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
    currentFocus?.let {
        val imm: InputMethodManager = getSystemService(
            Context.INPUT_METHOD_SERVICE
        ) as (InputMethodManager)
        imm.hideSoftInputFromWindow(it.windowToken, 0)
    }
    return super.dispatchTouchEvent(ev)
}
2

Versuchen Sie, stateHidden als windowSoftInputMode-Wert Ihrer Aktivität zu verwenden

http://developer.Android.com/reference/Android/R.attr.html#windowSoftInputMode

Zum Beispiel für Ihre Aktivität:

this.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
2
Alex Volovoy

Es gibt einen einfacheren Ansatz, der auf dem gleichen Problem des iPhone basiert. Überschreiben Sie einfach das Layout des Hintergrunds bei einem Touch-Event, in dem der Bearbeitungstext enthalten ist. Verwenden Sie diesen Code einfach in OnCreate der Aktivität (login_fondo ist das Stammlayout):

    final LinearLayout llLogin = (LinearLayout)findViewById(R.id.login_fondo);
    llLogin.setOnTouchListener(
            new OnTouchListener()
            {
                @Override
                public boolean onTouch(View view, MotionEvent ev) {
                    InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(
                            Android.content.Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(mActivity.getCurrentFocus().getWindowToken(), 0);
                    return false;
                }
            });
2
Alex R. R.

Dies ist eine leicht modifizierte Version der Antwort von Fje, die meist perfekt funktionierte.

In dieser Version wird ACTION_DOWN verwendet, sodass beim Durchführen einer Bildlaufaktion auch die Tastatur geschlossen wird ..__ Das Ereignis wird auch nicht weitergegeben, wenn Sie nicht auf einen anderen EditText klicken. Das bedeutet, dass durch Klicken auf eine beliebige Stelle außerhalb Ihres EditText, auch auf eine andere, die angeklickt werden kann, die Tastatur geschlossen wird.

@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
    if(ev.getAction() == MotionEvent.ACTION_DOWN)
    {
        final View view = getCurrentFocus();

        if(view != null)
        {
            final View viewTmp = getCurrentFocus();
            final View viewNew = viewTmp != null ? viewTmp : view;

            if(viewNew.equals(view))
            {
                final Rect rect = new Rect();
                final int[] coordinates = new int[2];

                view.getLocationOnScreen(coordinates);

                rect.set(coordinates[0], coordinates[1], coordinates[0] + view.getWidth(), coordinates[1] + view.getHeight());

                final int x = (int) ev.getX();
                final int y = (int) ev.getY();

                if(rect.contains(x, y))
                {
                    super.dispatchTouchEvent(ev);
                    return true;
                }
            }
            else if(viewNew instanceof EditText || viewNew instanceof CustomEditText)
            {
                super.dispatchTouchEvent(ev);
                return true;
            }

            final InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

            inputMethodManager.hideSoftInputFromWindow(viewNew.getWindowToken(), 0);

            viewNew.clearFocus();

            return true;
        }
    }
    return super.dispatchTouchEvent(ev);
}
1
Cadmonkey33

Fügen Sie einfach diesen Code der Klasse .__ hinzu. @Overide

public boolean dispatchTouchEvent(MotionEvent ev) {
    View view = getCurrentFocus();
    if (view != null && (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) && view instanceof EditText && !view.getClass().getName().startsWith("Android.webkit.")) {
        int scrcoords[] = new int[2];
        view.getLocationOnScreen(scrcoords);
        float x = ev.getRawX() + view.getLeft() - scrcoords[0];
        float y = ev.getRawY() + view.getTop() - scrcoords[1];
        if (x < view.getLeft() || x > view.getRight() || y < view.getTop() || y > view.getBottom())
            ((InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow((this.getWindow().getDecorView().getApplicationWindowToken()), 0);
    }
    return super.dispatchTouchEvent(ev);
}
1
Haseeb Javed

Um dieses Problem zu lösen, verwenden Sie zunächst setOnFocusChangeListener dieses Edittext

edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    Log.d("focus", "focus loosed");
                    // Do whatever you want here
                } else {
                    Log.d("focus", "focused");
                }
            }
        });

und dann müssen Sie dispatchTouchEvent in der Aktivität überschreiben, die den Edittext-Code enthält

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if ( v instanceof EditText) {
            Rect outRect = new Rect();
            v.getGlobalVisibleRect(outRect);
            if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                Log.d("focus", "touchevent");
                v.clearFocus();
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
            }
        }
    }
    return super.dispatchTouchEvent(event);
}

Was passiert, wenn ein Benutzer nach außen klickt, wird zuerst dieses dispatchTouchEvent aufgerufen, das dann den Fokus vom Editext löscht. Der OnFocusChangeListener wird jetzt aufgerufen. Der Fokus wurde geändert

1
Sudhanshu Gaur

Dies mag alt sein, aber ich habe es mit der Implementierung einer benutzerdefinierten Klasse zum Laufen gebracht 

public class DismissKeyboardListener implements OnClickListener {

    Activity mAct;

    public DismissKeyboardListener(Activity act) {
        this.mAct = act;
    }

    @Override
    public void onClick(View v) {
        if ( v instanceof ViewGroup ) {
            hideSoftKeyboard( this.mAct );
        }
    }       
}

public void hideSoftKeyboard(Activity activity) {
        InputMethodManager imm = (InputMethodManager)
        getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}

es empfiehlt sich, eine Helper-Klasse zu erstellen, und jeder Container Relative/Linear Layouts sollte dies implementieren. 

**** Beachten Sie, dass nur der Hauptcontainer diese Klasse implementieren soll (Zur Optimierung) ****

und implementiere es so:

Parent.setOnClickListener( new DismissKeyboardListener(this) ); 

das Schlüsselwort ist für Aktivität. Wenn Sie sich also auf Fragment befinden, verwenden Sie wie getActivity ().

--- Daumen hoch, wenn es Ihnen hilft ... .__--- Ralph

1
ralphgabb

Ich habe diesen Weg gemacht:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
   View view = getCurrentFocus();
   if (view != null && (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) && view instanceof EditText && !view.getClass().getName().startsWith("Android.webkit.")) {
            int scrcoords[] = new int[2];
            view.getLocationOnScreen(scrcoords);
            float x = ev.getRawX() + view.getLeft() - scrcoords[0];
            float y = ev.getRawY() + view.getTop() - scrcoords[1];
            if (x < view.getLeft() || x > view.getRight() || y < view.getTop() || y > view.getBottom())
                hideKeyboard(this);
        }
    return super.dispatchTouchEvent(ev);
}

Tastaturcode ausblenden :

public static void hideKeyboard(Activity act) {
    if(act!=null)
      ((InputMethodManager)act.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow((act.getWindow().getDecorView().getApplicationWindowToken()), 0);
  }

Erledigt

1
Hiren Patel
@Override
    public boolean onTouchEvent(MotionEvent event) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.
                INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }
1
Jeffy

Aktivität

 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
     ScreenUtils.hideKeyboard(this, findViewById(Android.R.id.content).getWindowToken());
     return super.dispatchTouchEvent(ev);
 }

ScreenUtils

 public static void hideKeyboard(Context context, IBinder windowToken) {
     InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
     imm.hideSoftInputFromWindow(windowToken, InputMethodManager.HIDE_NOT_ALWAYS);
 }
1
icebail

Eine andere Idee ist, die onInterceptTouchEvent-Methode in der Stammansicht für Ihre Aktivität zu überschreiben. 

Das Berührungsereignis geht von der vordersten Ansicht des Bildschirms (wo das Berührungsereignis aufgetreten ist) den Stapel von Ansichten herunter und ruft die onTouch-Methode auf, bis eine der Ansichten wahr zurückgibt, was anzeigt, dass das Berührungsereignis verbraucht wurde. Da viele Ansichten das Berührungsereignis standardmäßig verwenden (z. B. EditText oder TextView), gelangt das Ereignis nicht zur Hauptansicht onTouch-Methode der Aktivität.

Bevor Sie diese Durchquerung durchführen, durchläuft das Berührungsereignis jedoch einen anderen Pfad, indem Sie von der Stammansicht den Ansichtsbaum hinuntergehen, bis es die vorderste Ansicht erreicht. Diese Überquerung wird durch Aufruf von onInterceptTouchEvent durchgeführt. Wenn die Methode true zurückgibt, fängt sie das Ereignis ab ... nahhh, aber das ist ein kleiner Trick. Ich glaube nicht, dass Sie das tun wollen oder die Details wissen wollen. Was Sie wissen müssen, ist, dass Sie diese Methode in der Stammansicht für Ihre Aktivität überschreiben und den Code dort einfügen können, um die Tastatur bei Bedarf auszublenden.

0
Andre Luis IM

Sie können diesen Code verwenden. Verwenden Sie statt "mainRelativeLayout" Ihre Hauptlayout-ID 

//hide Soft keyboard on click outside  the input text
    findViewById(R.id.mainRelativeLayout).setOnClickListener(new 
View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InputMethodManager im = (InputMethodManager) 
getSystemService(INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
0);
        }

    });
0
vinod wakade

Sie können das onKey () -Ereignis in Activity leicht überschreiben und Fragmente zum Ausblenden der Tastatur verwenden.

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (keyCode == event.KEYCODE_ENTER) {

            intiateLoginProcess();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindow().getCurrentFocus()
                    .getWindowToken(), 0);

            return true;
        }
    }
    return false;
}
0
Ajith Memana

Dies ist die einfachste Lösung für mich (und von mir ausgearbeitet).

Dies ist die Methode zum Ausblenden der Tastatur.

public void hideKeyboard(View view){
        if(!(view instanceof EditText)){
            InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0);
        }
    }

setzen Sie jetzt das Attribut onclick des übergeordneten Layouts der Aktivität auf die obige Methode hideKeyboard, entweder in der Entwurfsansicht Ihrer XML-Datei oder indem Sie in der Textansicht Ihrer XML-Datei unter Code schreiben.

Android:onClick="hideKeyboard"
0
NullByte08

Sie können den Weg unten versuchen, es funktioniert für mich großartig :) 

Dieser Weg kann für Aktivität oder Fragment angewendet werden und ist auch mit ScrollView kompatibel. 

Wir setzen ScrollView als Layout der obersten Ebene, deklarieren die ID parentView für das LinearLayout-Element und fügen zwei Attribute wie folgt hinzu: 

Android:id="@+id/parentView"
Android:clickable="true"
Android:focusableInTouchMode="true"

Schreiben Sie im Code eine Funktion wie folgt: 

public static void hideSoftKeyboard (Activity activity) {
        InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }

Registrieren Sie dann einen OnFocusChangeListener für die Root-Ansicht (write in onCreate-Methode), um den gesamten EditText in Activity zu beeinflussen:

parentLayout.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    hideSoftKeyboard(your_activity_name.this);
                }
            }
        });
0
Dang Nguyen

Ich habe es geschafft, die Tastatur von innen zu verbergen. onItemClickAutoCompleteTextView

public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int indexSelected, long arg3) {
     InputMethodManager imm = (InputMethodManager) getSystemService(viewIn.getContext().INPUT_METHOD_SERVICE);
     imm.hideSoftInputFromWindow(viewIn.getApplicationWindowToken(), 0);
     // your code HERE
}
0
tony gil

hey Jungs, ich habe eine einfache Lösung für dieses Problem und diese Lösung kann für einfache Registrierung oder Anmeldeformular verwendet werden. Meine Lösung ist die gleiche, die ich in ios setontouch listenener in der Hauptansicht implementiert habe 

activity_main.xml füge eine ID zu deinem relativen Hauptlayout hinzu Android:id="@+id/mainlayout"

und fügen Sie diesen Code zu Ihrer Aktivität hinzu 

  RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.mainlayout);
  mainLayout.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                 Log.d("Json Response", "Touch outside");
                  InputMethodManager inputMethodManager = (InputMethodManager)  MainActivity.this.getSystemService(Activity.INPUT_METHOD_SERVICE);
                    inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
                return false;
            }
        });
0

Meine Lösung verbirgt die Tastatur beim Klicken außerhalb der Aktivitäten mit allen Bearbeitungstexten. Ohne sie einzeln anzugeben.

Fügen Sie zunächst die Stammansicht der Layout-XML hinzu: Android: clickable = "true" Android: focusableInTouchMode = "true"

Als Nächstes erstellen Sie eine übergeordnete Aktivität aller Aktivitäten, deren Tastatur Sie ausblenden möchten, und geben Sie die onResume () -Methode an:

 @Override
    protected void onResume() {
        super.onResume();
        //getting Root View that gets focus
        View rootView =((ViewGroup)findViewById(Android.R.id.content)).
                getChildAt(0);
        rootView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    hideKeyboard(AbstractActivity.this);
                }
            }
        });
    }

Erweitern Sie Ihre Aktivität mit dieser allgemeinen Aktivität (Vererbungsstärke!) Und das ist alles. Jedes Mal, wenn ein EditText (bei einer erweiterten Aktivität) den Fokus verliert, wird die Tastatur ausgeblendet.

P.S. hideKeyboard-Methode:

public static void hideKeyboard(Activity context) {
    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow( context.getCurrentFocus().getWindowToken(), 0);
}

context.getCurrentFocus () muss keine bestimmte EditText-Ansicht angeben.

0
Misha Akopov

Überschreiben Sie einfach den Code in Activity

 @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (getCurrentFocus() != null) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
    return super.dispatchTouchEvent(ev);
}
0
sumit sonawane

Ich bekam dies mit einer leichten Variante der Lösung von Fernando Camarago. In meiner onCreate-Methode füge ich einen einzelnen onTouchListener an die Stammansicht an, sende die Ansicht jedoch nicht als Aktivität.

        findViewById(Android.R.id.content).setOnTouchListener(new OnTouchListener() {           
        public boolean onTouch(View v, MotionEvent event) {
            Utils.hideSoftKeyboard(v);
            return false;
        }
    });

In einer separaten Utils-Klasse befindet sich ...

    public static void hideSoftKeyboard(View v) {
    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
0
AndyMc

Ich dachte an dieses Problem ... zuerst. Ich denke, dass setOnTouchListener keine einfache Lösung ist. Ich glaube also, dass dispatchTouchEvent die beste einfache Lösung ist.

public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_UP) {
        View v = getCurrentFocus();
        if (v instanceof EditText) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    }
    return super.dispatchKeyEvent(event);
}

hier ist ACTION_UP ein wichtiger Punkt.

Ich ging davon aus, dass EditText nur eine Soft-Tastatur zeigt, ansonsten keine Tastatur . Ich habe auf Android5.0.1 (G3.cat6 von LG) getestet.

wenn Sie Drag-Check, langer Klick, ... benötigen, zeigen Sie die obigen Kommentare.

0
Hogun