So entfernen Sie den Fokus von einem einzelnen editText

Lesezeit: 4 Minuten

Benutzer-Avatar
tobbenb3

In meiner Bewerbung habe ich eine Single EditText zusammen mit einigen TextViews, Knopf und ein Spinner. Mein EditText erhält den Fokus, da es die einzige fokussierbare Ansicht in dieser Aktivität ist, glaube ich. Mein EditText wird mit einem orangefarbenen Rand und einem Cursor auf dem Feld angezeigt.

Jetzt möchte ich den Fokus aus diesem Feld entfernen (ich möchte nicht, dass der Cursor und der Rahmen angezeigt werden). Gibt es eine Möglichkeit, dies zu tun?

Ich war in der Lage, mich auf die Schaltfläche zu konzentrieren, indem ich es tat button.seFocusableInTouchMode() und button.requestFocus(). Aber das hebt die Schaltfläche hervor und ist offensichtlich nicht das, was ich will.

  • Nicht wirklich ein Duplikat. Bei dieser Frage geht es darum, zu verhindern, dass EditText den Fokus auf den Aktivitätsstart legt. Hier geht es darum, den Fokus zu entfernen. Das sind verschiedene Probleme.

    – Wilhelm Jockusch

    12. Juli 2014 um 18:19 Uhr

Benutzer-Avatar
Zaraki

neu bei Android .. versucht

getWindow().getDecorView().clearFocus();

Für mich geht das..

Nur um hinzuzufügen … Ihr Layout sollte Folgendes haben:

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

  • editText.clearFocus() reicht aus, nachdem Sie Ihre anderen beiden Zeilen hinzugefügt haben

    – Alireza Jamali

    6. Februar 2019 um 10:59 Uhr

Benutzer-Avatar
MischaZ

Haben Sie versucht, alte gute zu verwenden View.clearFocus()

  • Funktioniert nicht für mich. Aufruf in onCreate aber der EditText bleibt mit Rand und blinkendem Cursor.

    – Benutzer

    4. Mai 2012 um 10:38 Uhr

  • Ich habe diese Methode verwendet und einen OnFocusChangeListener hinzugefügt, und der Fokus wurde gelöscht und dann (automatisch) erneut festgelegt.

    – Ray Britton

    4. September 2012 um 9:03 Uhr

Benutzer-Avatar
Maragues

Überprüfen Sie diese Frage und die ausgewählte Antwort: Beenden Sie, dass EditText beim Start der Aktivität den Fokus erhält. Es ist hässlich, aber es funktioniert, und soweit ich weiß, gibt es keine bessere Lösung.

  • Danke, das hatte ich nicht gesehen. Mein EditText wurde in ein TableLayout gepackt, also so: hat das Problem für mich gelöst.

    – tobbenb3

    8. Oktober 2010 um 13:27 Uhr


  • großartig, es ist wirklich ein hässliches Problem, und die Lösung ist überhaupt nicht intuitiv.

    – Maragues

    11. Oktober 2010 um 8:23 Uhr

  • Wie so vieles andere in der wackeligen Android-API, und ich schreibe dies im Jahr 2013.

    – sebrock

    8. Januar 2013 um 14:06 Uhr

  • 2018 ist da und möchte sagen, dass viele Dinge in der Android-Welt (Arch Components usw.) viel besser geworden sind, aber grundlegende Dinge wie diese sind immer noch ein Schmerz … ein großer Schmerz.

    – Martin Marconcini

    18. Mai 2018 um 18:40 Uhr

Ich werde versuchen zu erklären, wie man den Fokus (blinkender Cursor) aus der EditText-Ansicht mit etwas mehr Details und Verständnis entfernt. Normalerweise sollte diese Codezeile funktionieren

editText.clearFocus()

aber es könnte eine Situation geben, in der der editText immer noch den Fokus hat, und dies geschieht, weil die Methode clearFocus() versucht, den Fokus wieder auf das zu setzen Erste Fokussierbare Ansicht im Aktivitäts-/Fragment-Layout.

Wenn Sie also nur eine Ansicht in der Aktivität haben, die fokussierbar ist, und dies ist normalerweise Ihre EditText-Ansicht, dann setzt clearFocus() den Fokus wieder auf diese Ansicht, und für Sie sieht es so aus, als ob clearFocus() nicht funktioniert. Denken Sie daran, dass EditText-Ansichten standardmäßig fokussierbar (wahr) sind. Wenn Sie also nur eine EditText-Ansicht in Ihrem Layout haben, erhält sie immer den Fokus auf dem Bildschirm. In diesem Fall besteht Ihre Lösung darin, die übergeordnete Ansicht (einige Layouts, z. B. LinearLayout, Framelayout) in Ihrer Layoutdatei zu finden und diesen XML-Code darauf festzulegen

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

Wenn Sie danach editText.clearFocus() ausführen, akzeptiert die übergeordnete Ansicht in Ihrem Layout den Fokus und Ihr editText wird nicht mehr fokussiert.

Ich hoffe, dies hilft jemandem zu verstehen, wie clearFocus() funktioniert.

wenn Edittext übergeordnetes Layout ist Linear dann füge hinzu

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

Wie unten

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:focusable="true"
            android:focusableInTouchMode="true">

           <EditText/>
          ............

Wenn das übergeordnete Layout von Edittext dann relativ ist

  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true"

wie

  <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="beforeDescendants"
            android:focusableInTouchMode="true">

           <EditText/>
          ............

Benutzer-Avatar
lm2a

Ich weiß, es ist zu spät, aber für jemanden mit dem gleichen Bedarf editText.setFocusable(false) si, wonach Sie suchen.

Verwenden Sie den angehängten Code, um “jemand anderem” den Fokus zu geben. Dies ist in Ordnung, wenn Sie eine Ansicht haben, in der Sie einfach die Tastatur schließen und den Fokus freigeben möchten. Es ist Ihnen egal, wer ihn erhält.

Verwenden Sie wie folgt: FocusHelper.releaseFocus(viewToReleaseFocusFrom)

public class FocusHelper {
    public static void releaseFocus(View view) {
        ViewParent parent = view.getParent();
        ViewGroup group = null;
        View child = null;
        while (parent != null) {
            if (parent instanceof ViewGroup) {
                group = (ViewGroup) parent;
                for (int i = 0; i < group.getChildCount(); i++) {
                    child = group.getChildAt(i);
                    if(child != view && child.isFocusable())
                        child.requestFocus();
                }
            }
            parent = parent.getParent();
        }
    }
}

Doc: Die Methode durchquert die untergeordnete Ansicht und den Ansichtsbaum nach oben und sucht nach dem ersten untergeordneten Element, dem der Fokus zugewiesen werden soll.

Bearbeiten: Sie können dafür auch die API verwenden:

View focusableView = v.focusSearch(View.FOCUS_DOWN);
if(focusableView != null) focusableView.requestFocus();

1206540cookie-checkSo entfernen Sie den Fokus von einem einzelnen editText

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy