android - focus Stoppen Sie, dass EditText beim Start der Aktivität den Fokus erhält




15 Answers

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

Wenn es sich um das Problem der virtuellen Tastatur handelt, AndroidManifest.xml Dokumentation zum AndroidManifest.xml Element <activity> .

android:windowSoftInputMode="stateHidden" - verstecken Sie es immer, wenn Sie die Aktivität android:windowSoftInputMode="stateHidden" .

oder android:windowSoftInputMode="stateUnchanged" - ändern Sie es nicht ( zeigen Sie es nicht an , wenn es nicht bereits angezeigt wird, aber wenn es bei der Eingabe der Aktivität geöffnet war, lassen Sie es geöffnet).

prevent edittext focus android

Ich habe eine Activity in Android mit zwei Elementen:

  1. EditText
  2. ListView

Wenn meine Activity beginnt, hat der EditText sofort den Eingabefokus (blinkender Cursor). Ich möchte nicht, dass beim Start eine Kontrolle den Eingabefokus hat. Ich habe es versucht:

EditText.setSelected(false);

Kein Glück. Wie kann ich den EditText davon überzeugen, sich beim Start der Activity nicht selbst auszuwählen?




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

  • Erstellen Sie ein LinearLayout (Ich weiß nicht, ob andere Layouts funktionieren)
  • Setzen Sie die Attribute android:focusable="true" und android:focusableInTouchMode="true"

Und der EditText erhält nach dem Start der Aktivität nicht den Fokus




Ich verwendete die Informationen, die von anderen Postern bereitgestellt wurden, und benutzte die folgende Lösung:

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



Versuchen Sie es mit clearFocus() anstelle von setSelected(false) . Jede Ansicht in Android ist sowohl fokussierbar als auch wählbar, und ich denke, Sie möchten nur den Fokus löschen.




Keine dieser Lösungen hat für mich funktioniert. So korrigiere ich den Autofokus:

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



Sie können einfach "fokussierbar" und "fokussierbar im Touch-Modus" auf "true" in der ersten TextView des layout TextView . Auf diese Weise wird die TextView zu Beginn der TextView fokussiert, aber aufgrund ihrer Beschaffenheit werden auf dem Bildschirm nichts fokussiert und natürlich wird keine Tastatur angezeigt ...




Ich musste den Fokus programmgesteuert aus allen Bereichen löschen. 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 zeigst.




Die einfachste Antwort, fügen Sie dies einfach im übergeordneten Layout des XML ein.

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



Probieren Sie dies vor Ihrem ersten bearbeitbaren Feld aus:

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



Spät, aber vielleicht hilfreich. Erstellen Sie einen Dummy-EditText am oberen Rand Ihres Layouts und rufen myDummyEditText.requestFocus() dann myDummyEditText.requestFocus() in onCreate()

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

Das scheint sich wie erwartet zu verhalten. Keine Notwendigkeit, Konfigurationsänderungen zu handhaben, usw. Ich brauchte dies für eine Aktivität mit einer langen Textansicht (Anweisungen).




Ja, ich habe das Gleiche getan - ein lineares Layout 'Dummy' erstellen, das den anfänglichen Fokus erhält. Außerdem setze ich die 'nächsten' Fokus-IDs, damit der Benutzer sie nach einem Bildlauf nicht mehr scharf stellen kann:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

eine Menge Arbeit, nur um den Blick auf einen Blick loszuwerden ..

Vielen Dank




Für mich funktionierte auf allen Geräten Folgendes:

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

Setzen Sie dies einfach als Ansicht vor die problematische fokussierte Ansicht, und das ist es.




Die einfachste Sache, die ich gemacht habe, ist, mich auf eine andere Ansicht in onCreate zu konzentrieren:

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

Dadurch wurde die Soft-Tastatur angehalten und im EditText blitzte kein Cursor.




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



Sie können dies erreichen, indem Sie einen Dummy- EditText mit einer EditText und -höhe von 0dp und den Fokus auf diese Ansicht anfordern. Fügen Sie das folgende Code-Snippet in Ihrem XML-Layout hinzu:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>



Related