So verhindern Sie, dass EditText beim Start der Aktivität in Android den Fokus erhält


2873

Ich habe eine Activityin Android, mit zwei Elementen:

  1. EditText
  2. ListView

Wenn mein ActivityStart ist, hat der EditTextsofort Fokus (blinkender Cursor). Ich möchte nicht, dass ein Steuerelement beim Start einen Eingabefokus hat. Ich habe es versucht:

EditText.setSelected(false);
EditText.setFocusable(false);

Kein Glück. Wie kann ich die davon überzeugen EditText, sich beim ActivityStart nicht selbst auszuwählen ?

Antworten:


2593

Hervorragende Antworten von Luc und Mark, jedoch fehlt ein gutes Codebeispiel. Das Hinzufügen des Tags android:focusableInTouchMode="true"und android:focusable="true"des übergeordneten Layouts (z. B. LinearLayoutoder ConstraintLayout) wie im folgenden Beispiel behebt das Problem.

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext" 
    android:nextFocusLeft="@id/autotext"/>

711
Was ist mit der Einstellung übergeordneten Layout android:focusableInTouchMode="true"!
Muhammad Babar

28
Perfekt! Danke ... Eine Sache zu beachten ist, dass der Dummy-Gegenstand direkt vor dem fokussierbaren Element platziert werden muss !!! Ich hatte eine Textansicht zwischen meinem Dummy und dem EditText und die Methode funktionierte nicht!
Maddob

25
Einstellung android: focusableInTouchMode = "true" zum übergeordneten Layout war der gute Ansatz dank @Muhammad Babar
Sujiths

7
Toller Code, hat mir sehr geholfen :) Um zu versuchen, ihn zu verbessern, android:focusableInTouchMode="true"deckt android:focusable="true"+ noch etwas mehr ab, ist also in diesem Fall android:focusable="true"unnötig und kann entfernt werden. Zusätzlich kann die Dummy-Ansicht eine Ansicht anstelle eines LinearLayout sein. Dies spart Rechenleistung und erspart Ihnen einige Warnungen. Daher ist meine Empfehlung, die Dummy-Ansicht durch<View android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px"/>
Jacob R

20
@PietroRea Android hat nervige Autofokus-Verhaltensweisen, die in das Kernverhalten seiner App-Struktur integriert sind. Wenn Sie mitteilen, dass ein Bearbeitungstext den Fokus freigibt oder verliert, entscheidet er automatisch, wohin der Fokus geht. Ohne ein neues Objekt, auf das der Fokus übertragen werden soll, wird das erste fokussierbare Element im Layout ausgewählt, auch wenn dieses Element gerade den Fokus gelöscht hat! Es ist ein bisschen verrückt und frustrierend, aber vielleicht gibt es einen triftigen Grund für diese Art von Verhalten.
Weston Hochzeit

1676

Ist das eigentliche Problem, dass Sie einfach nicht wollen, dass es überhaupt einen Fokus hat? Oder möchten Sie nicht, dass die virtuelle Tastatur als Ergebnis der Fokussierung angezeigt wird EditText? Ich sehe kein wirkliches Problem mit dem EditTextFokus auf den Start, aber es ist definitiv ein Problem, das softInput-Fenster geöffnet zu haben, wenn der Benutzer nicht explizit aufgefordert hat, sich auf das zu konzentrieren EditText(und als Ergebnis die Tastatur zu öffnen).

Wenn es sich um ein Problem der virtuellen Tastatur handelt, lesen Sie die Dokumentation zum AndroidManifest.xml Element <activity> .

android:windowSoftInputMode="stateHidden" - Verstecke es immer, wenn du die Aktivität betrittst.

oder android:windowSoftInputMode="stateUnchanged"- nicht ändern (z. B. nicht anzeigen , wenn es nicht bereits angezeigt wird, aber wenn es beim Betreten der Aktivität geöffnet war, lassen Sie es geöffnet).


24
Trotzdem befindet sich der Cursor im ersten EditText im Layout - obwohl die Tastatur nicht angezeigt wird
Martyglaubitz

39
@Anderson: Nichts an der Antwort deutete darauf hin, dass dies den EditTextFokus daran hindern würde, den Fokus zu erhalten. Es wird tatsächlich klargestellt, dass Sie auf diese Weise verhindern, dass sich der IME der Softwaretastatur automatisch im Fokus öffnet. weil es wahrscheinlicher ist, dass das größere Problem darin besteht, dass die Softtastatur unerwartet auftaucht und nicht der Fokus selbst. Wenn Ihr Problem darin besteht, dass Sie EditTexttatsächlich den Fokus haben, verwenden Sie die Antwort eines anderen.
Joe


3
Tun Sie dies nicht bei einer Aktivität mit einer Kamera - es unterbricht das Timing des Blitzes (fragen Sie mich nicht warum)
Daniel Wilson

1
@ Joe, bei dieser Frage geht es nicht darum, die Tastatur beim Start auszublenden. Eine solche Frage wurde hier gestapelt stackoverflow.com/questions/18977187/…
user924

1141

Es gibt eine einfachere Lösung. Legen Sie diese Attribute in Ihrem übergeordneten Layout fest:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true" >

Und jetzt, wenn die Aktivität beginnt, wird dieses Hauptlayout standardmäßig fokussiert.

Außerdem können wir den Fokus zur Laufzeit aus untergeordneten Ansichten entfernen (z. B. nach Abschluss der untergeordneten Bearbeitung), indem wir den Fokus erneut auf das Hauptlayout legen, wie folgt:

findViewById(R.id.mainLayout).requestFocus();

Guter Kommentar von Guillaume Perrot :

android:descendantFocusability="beforeDescendants"scheint die Standardeinstellung zu sein (ganzzahliger Wert ist 0). Es funktioniert nur durch Hinzufügen android:focusableInTouchMode="true".

Wirklich können wir sehen, dass die beforeDescendantsEinstellung in der ViewGroup.initViewGroup()Methode (Android 2.2.2) als Standard festgelegt ist . Aber nicht gleich 0.ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

Danke an Guillaume.


1
Es ist wichtig, diese Attribute auf das direkte übergeordnete Element der Ansicht festzulegen, das sich auf die Erstellung von Aktivitäten konzentriert, da dies sonst nicht funktioniert.
Tomrozb

4
Einfach eine perfekte Lösung. Funktioniert für beide: 1. Deaktivieren des Autofokus und 2. Deaktivieren des automatischen Öffnens der Softtastatur
Treffen am

Nett. Es muss kein direkter Elternteil sein. Ich habe es auf Root-Ebene des Layouts eingestellt und es scheint gut zu funktionieren.
Kurotsuki

@DanielWilson Wann möchten Sie eine Bildlaufansicht als direktes übergeordnetes Element eines Edittextes?
Mark Buikema

Sie müssen mit Fenstersoft-Eingaben wie readyandroid.wordpress.com/…
Ready Android

427

Die einzige Lösung, die ich gefunden habe, ist:

  • Erstellen Sie ein LinearLayout (ich weiß nicht, ob andere Arten von Layouts funktionieren)
  • Stellen Sie die Attribute android:focusable="true"und einandroid:focusableInTouchMode="true"

Und das EditTextwird nicht den Fokus bekommen, nachdem die Aktivität gestartet wurde


Einfach!! Ich habe diese Eigenschaften zunächst der übergeordneten Ansicht hinzugefügt, was fehlgeschlagen ist. Dann habe ich sie auf ein anderes Layout festgelegt und einwandfrei funktioniert. Vielen Dank!!
Rino

Es funktioniert auch mit einem ConstraintLayout.
Hawklike

86

Das Problem scheint von einer Eigenschaft zu stammen, die ich nur im XML formLayout sehen kann.

Stellen Sie sicher, dass diese Zeile am Ende der Deklaration innerhalb der EditTextXML-Tags entfernt wird:

<requestFocus />

Das sollte so etwas geben:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>

78

Unter Verwendung der Informationen anderer Poster habe ich die folgende Lösung verwendet:

im Layout XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

in onCreate ()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

und schließlich in onResume ()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}

74

Versuchen Sie stattdessen clearFocus () statt setSelected(false). Jede Ansicht in Android hat sowohl Fokussierbarkeit als auch Auswahlbarkeit, und ich denke, dass Sie nur den Fokus löschen möchten.


Das klingt vielversprechend, aber zu welchem ​​Zeitpunkt im Aktivitätslebenszyklus sollte es aufgerufen werden? Wenn ich es in onCreate () aufrufe, hat der EditText immer noch den Fokus. Sollte es in onResume () oder an einem anderen Ort aufgerufen werden? Vielen Dank!
Mark

8
Ich habe die akzeptierte Antwort mit dieser Antwort kombiniert. Ich rief myEditText.clearFocus(); myDummyLinearLayout.requestFocus();in dem onResumevon der Aktivität. Dadurch wurde sichergestellt, dass der EditText den Fokus beim Drehen des Telefons nicht beibehielt.
Dienstag

71

Im Folgenden wird verhindert, dass edittext beim Erstellen den Fokus übernimmt. Wenn Sie sie berühren, greifen Sie jedoch darauf zu.

<EditText
    android:id="@+id/et_bonus_custom"
    android:focusable="false" />

Sie setzen also fokussierbar in der XML auf false, aber der Schlüssel befindet sich in Java, wo Sie den folgenden Listener hinzufügen:

etBonus.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        return false;
    }
});

Da Sie false zurückgeben, dh das Ereignis nicht verbrauchen, wird das Fokussierungsverhalten wie gewohnt fortgesetzt.


6
Aber dies wird in Zukunft niemals den Fokus gewinnen. Wie kann man den Fokus nur für den Anfang (Aktivitätsstart) stoppen?
Jayesh

1
Der onTouchListener wird vor anderen Berührungsaktionen aufgerufen. Durch Aktivieren der Fokussierbarkeit bei Berührung erfolgt der Standardfokus bei der ersten Berührung. Die Tastatur wird hochgefahren und alles.
MinceMan

1
Ich denke, das ist der beste Weg, es zu tun. Außerdem hat der oben genannte mumbo-jumbo xml-Dummy-Code für einen komplexen Satz von Bearbeitungstexten NICHT funktioniert ... Wenn dies funktioniert, werde ich definitiv abstimmen.
Radu

Wenn Sie jedoch mehrere Bearbeitungstexte haben, wird der Fokus auf den nächsten Bearbeitungstext gelegt und die Tastatur geöffnet, sodass es besser ist, android: windowSoftInputMode = "stateAlwaysHidden" im Manifest für bestimmte Aktivitäten hinzuzufügen .
Karan Sharma

Hinweis: Unter Android P erfasst das System keinen Standardfokus mehr. Dies bedeutet, dass dieser Hack nicht notwendig ist, beginnend mit P.
MinceMan

65

Ich hatte mehrere Antworten einzeln ausprobiert, aber der Fokus liegt immer noch auf dem EditText. Ich habe es nur geschafft, indem ich zwei der folgenden Lösungen zusammen verwendet habe.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

(Referenz von Silver https://stackoverflow.com/a/8639921/15695 )

und entfernen

 <requestFocus />

bei EditText

(Referenz von floydaddict https://stackoverflow.com/a/9681809 )


1
Ich musste zusätzlich zu den oben genannten Informationen edittext.clearFocus () hinzufügen, damit es funktioniert :)
Nav

57

Späte, aber einfachste Antwort, fügen Sie diese einfach im übergeordneten Layout des XML hinzu.

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

Upvote, wenn es dir geholfen hat! Viel Spaß beim Codieren :)


2
hat perfekt für mich funktioniert. Eine weitere zu beachtende Sache ist, diese Zeilen nicht zur Bildlaufansicht hinzuzufügen. In der Bildlaufansicht funktioniert es nicht. Funktionierte aber perfekt mit linearem Layout.
Karthic Srinivasan

46

Keine dieser Lösungen hat bei mir funktioniert. Die Art und Weise, wie ich den Autofokus repariere, war:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>

2
android: windowSoftInputMode = "adjustPan" für jede Aktivität im Android Manifest
rallat

43

Einfache Lösung: In AndroidManifestin ActivityTag - Nutzung

android:windowSoftInputMode="stateAlwaysHidden"

6
Genau genommen löst dies das Problem nicht. Das OP sagte: "Ich möchte nicht, dass eine Steuerung beim Start den Eingabefokus hat." Ihre Lösung verbirgt nur die Tastatur, es gibt einen kleinen Unterschied.
Katzenhut

@katzenhut yep, das ist genau mein Problem mit dieser Antwort. Wenn ich mich auf meinen Edittext konzentriere, wird eine PlaceAutoComplete-Aktivität geöffnet, daher ist diese Antwort unvollständig
Zach,

Diese Antwort wäre vollständig, wenn die Frage lauten würde: Wie stelle ich immer sicher, dass in meiner Aktivität niemals eine Tastatur angezeigt wird? Welches ist nicht.
Martin Marconcini

37

Sie können einfach "fokussierbar" und "fokussierbar im Berührungsmodus" so einstellen, dass sie beim ersten Mal TextViewden Wert "true" habenlayout . Auf diese Weise wird die Aktivität zu Beginn der Aktivität TextViewfokussiert, aber aufgrund ihrer Natur wird auf dem Bildschirm nichts fokussiert angezeigt, und natürlich wird keine Tastatur angezeigt ...


funktioniert perfekt für mich, nur ich setze den Wert auf das äußerste Layout in meiner Aktivität und nicht auf die erste Textansicht
Maverick1st

36

Folgendes hat für mich in funktioniert Manifest. Schreiben ,

<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>

1
Dadurch wird die Fokussierung des Textfelds nicht aufgehoben, sondern lediglich die Tastatur ausgeblendet. Sie erhalten weiterhin einen Hinweis, der aus dem Feld verschoben wird, und alle Farbstatus-Selektoren zeigen den Status "fokussiert = wahr" an.
A. Rager

31

Ich musste den Fokus programmgesteuert aus allen Bereichen entfernen. Ich habe gerade die folgenden zwei Anweisungen zu meiner Hauptlayoutdefinition hinzugefügt.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

Das ist es. Mein Problem wurde sofort behoben. Danke, Silver, dass du mich in die richtige Richtung gelenkt hast.


28

Fügen Sie android:windowSoftInputMode="stateAlwaysHidden"das Aktivitäts-Tag der Manifest.xmlDatei hinzu.

Quelle


1
Dadurch wird die Fokussierung des Textfelds nicht aufgehoben, sondern lediglich die Tastatur ausgeblendet. Sie erhalten weiterhin einen Hinweis, der aus dem Feld verschoben wird, und alle Farbstatus-Selektoren zeigen den Status "fokussiert = wahr" an.
A. Rager

25

Wenn Sie eine andere Ansicht zu Ihrer Aktivität wie a haben ListView, können Sie auch Folgendes tun:

ListView.requestFocus(); 

in Ihrem onResume()Fokus von der zu ergreifen editText.

Ich weiß, dass diese Frage beantwortet wurde, aber nur eine alternative Lösung bietet, die für mich funktioniert hat :)


22

Versuchen Sie dies vor Ihrem ersten bearbeitbaren Feld:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();

21

Fügen Sie in der onCreateMethode Folgendes hinzu :

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

1
Dadurch wird die Fokussierung des Textfelds nicht aufgehoben, sondern lediglich die Tastatur ausgeblendet. Sie erhalten weiterhin einen Hinweis, der aus dem Feld verschoben wird, und alle Farbstatus-Selektoren zeigen den Status "fokussiert = wahr" an.
A. Rager

17

Da ich das XML nicht gerne mit Funktionen verschmutzen möchte, habe ich diese Methode erstellt, die den Fokus "transparent" aus der ersten fokussierbaren Ansicht stiehlt und sich dann bei Bedarf selbst entfernt!

public static View preventInitialFocus(final Activity activity)
{
    final ViewGroup content = (ViewGroup)activity.findViewById(android.R.id.content);
    final View root = content.getChildAt(0);
    if (root == null) return null;
    final View focusDummy = new View(activity);
    final View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            view.setOnFocusChangeListener(null);
            content.removeView(focusDummy);
        }
    };
    focusDummy.setFocusable(true);
    focusDummy.setFocusableInTouchMode(true);
    content.addView(focusDummy, 0, new LinearLayout.LayoutParams(0, 0));
    if (root instanceof ViewGroup)
    {
        final ViewGroup _root = (ViewGroup)root;
        for (int i = 1, children = _root.getChildCount(); i < children; i++)
        {
            final View child = _root.getChildAt(i);
            if (child.isFocusable() || child.isFocusableInTouchMode())
            {
                child.setOnFocusChangeListener(onFocusChangeListener);
                break;
            }
        }
    }
    else if (root.isFocusable() || root.isFocusableInTouchMode())
        root.setOnFocusChangeListener(onFocusChangeListener);

    return focusDummy;
}

15

Spät, aber vielleicht hilfreich. Erstellen Sie einen Dummy-EditText oben in Ihrem Layout und rufen Sie ihn myDummyEditText.requestFocus()aufonCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Das scheint sich so zu verhalten, wie ich es erwartet habe. Konfigurationsänderungen usw. müssen nicht behandelt werden. Ich benötigte dies für eine Aktivität mit einer langen Textansicht (Anweisungen).


Warum nicht einfach mit der Root-Ansicht selbst?
CJBS


13

Ja, ich habe das Gleiche getan - ein 'Dummy'-Linearlayout erstellt, das den anfänglichen Fokus erhält. Außerdem habe ich die 'nächsten' Fokus-IDs so eingestellt, dass der Benutzer sie nach einmaligem Scrollen nicht mehr fokussieren kann:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

viel Arbeit, nur um den Fokus auf eine Ansicht loszuwerden ..

Vielen Dank


12

Für mich hat auf allen Geräten Folgendes funktioniert:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

Stellen Sie dies einfach als eine Ansicht vor die problematische fokussierte Ansicht, und das war's.


10

Das Einfachste, was ich getan habe, ist, mich auf eine andere Ansicht in onCreate zu konzentrieren:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Dadurch wurde das Hochfahren der Softtastatur gestoppt und im EditText blinkte kein Cursor.


10

Dies ist die perfekte und einfachste Lösung. Ich verwende diese immer in meiner App.

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

Dadurch wird die Fokussierung des Textfelds nicht aufgehoben, sondern lediglich die Tastatur ausgeblendet. Sie erhalten weiterhin einen Hinweis, der aus dem Feld verschoben wird, und alle Farbstatus-Selektoren zeigen den Status "fokussiert = wahr" an.
A. Rager

9
<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>

8

Schreiben Sie diesen Code in die ManifestDatei, in der ActivitySie die Tastatur nicht öffnen möchten.

android:windowSoftInputMode="stateHidden"

Manifestdatei:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.projectt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="24" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
         <activity
            android:name=".Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Login"
            **android:windowSoftInputMode="stateHidden"**
            android:label="@string/app_name" >
        </activity>

    </application>

</manifest>

2
Dadurch wird die Fokussierung des Textfelds nicht aufgehoben, sondern lediglich die Tastatur ausgeblendet. Sie erhalten weiterhin einen Hinweis, der aus dem Feld verschoben wird, und alle Farbstatus-Selektoren zeigen den Status "fokussiert = wahr" an.
A. Rager

7

Bei onCreateIhrer Aktivität, fügen Sie einfach die Verwendung clearFocus()auf Ihrem EditText Elemente. Zum Beispiel,

edittext = (EditText) findViewById(R.id.edittext);
edittext.clearFocus();

Und wenn Sie den Fokus auf ein anderes Element umleiten möchten, verwenden Sie requestFocus()dieses. Zum Beispiel,

button = (Button) findViewById(R.id.button);
button.requestFocus();

6

Ich verwende den folgenden Code, um zu verhindern, dass ein EditText den Fokus stiehlt, wenn meine Taste gedrückt wird.

addButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        View focused = internalWrapper.getFocusedChild();
        focused.setVisibility(GONE);
        v.requestFocus();
        addPanel();
        focused.setVisibility(VISIBLE);
    }
});

Blenden Sie den Bearbeitungstext grundsätzlich aus und zeigen Sie ihn dann erneut an. Dies funktioniert bei mir so wie der EditText ist nicht es keine Rolle spielt, ob er .

Sie können versuchen, es nacheinander zu verstecken und anzuzeigen, um festzustellen, ob es dadurch den Fokus verliert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.