2011-09-29 13 views
30

Ho una modifica del testo:Disabilita messa a fuoco automatica a modificare il testo

<LinearLayout android:id="@+id/linearLayout7" android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1" android:id="@+id/editText1" android:text="3"> 
      <requestFocus></requestFocus> 
     </EditText> 
     <Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/button2"></Button> 
    </LinearLayout> 

e poi alcune altre cose sotto

Il problema che sto avendo è che proprio quando l'applicazione avvia il focus è sul input, non voglio che la messa a fuoco sia in ingresso quando inizia l'app.

Ho provato a rimuovere la cosa

<requestFocus></requestFocus> 

e non ha fatto nulla.

+0

Set android: attivabile = "false". Non si concentrerà sul tuo EditText –

+1

che diventerà inutilizzabile per sempre? ora anche se clicco sul campo di testo non si focalizzerà. Voglio mettere a fuoco quando cliccato, ma non automaticamente quando l'app inizia – Saad

+1

si può iniziare con l'identificazione del pulsante e mettere a fuoco il pulsante nel codice .... – Hanry

risposta

88

Aggiungere gli elementi android:focusable="true" e android:focusableInTouchMode="true" nel layout principale di EditText come segue;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout7" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:focusable="true" android:focusableInTouchMode="true"> 

Penso che dovrebbe aiutarti.

+7

no, non ha fatto nulla – Saad

+1

@Saad: Funziona. L'ho provato prima di postarlo qui. Mantieni l'elemento nella parte superiore del file XML. BTW, quale livello di API (o versione di Android) stai sviluppando? – Mudassir

+1

buono. Puoi spiegare cosa sono android: focusable e android: focusableInTouchMode usato per (intendo la differenza e l'uso). – Anoop

3

NO Più lavoro ... basta aggiungere android: windowSoftInputMode = "stateAlwaysHidden" al tag attività del file Manifest.xml.

+0

prega spiegare cosa fa e come può aiutare l'OP. Suggerimenti senza spiegazione non aiutano molto, anche se la correzione potrebbe funzionare. – SuperBiasedMan

+0

https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft –

+0

Segnala questo .. il collegamento sopra ... –

1
<EditText 
     android:id="@+id/input" 
     android:layout_width="0dp" 
     android:layout_height="48dp" 
     android:focusable="false" 
     android:focusableInTouchMode="false" /> 

detailInputView = (EditText) debugToolsView.findViewById(R.id.input); 
    detailInputView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      detailInputView.setFocusable(true); 
      detailInputView.setFocusableInTouchMode(true); 
      return false; 
     } 
    }); 
+0

Ma anche questo non ha aiutato a concentrarsi sul campo di modifica del testo, cambia semplicemente il modo in cui l'elemento viene caricato sul dispositivo, sebbene funzioni – HSL

0

Basta aggiungere il seguente al tag principale visualizzazione layout xml:

android:focusableInTouchMode="true" 
0

Hei Lee,

ci sono diversi modo per fare questo, Mudassir ha dare un modo per voi fare quello.

Se l'idea non funziona, quindi fare solo semplici cosa-

Nel vostro AndroidManifest>Activity aggiungere questo semplice codice:

android:windowSoftInputMode="stateHidden" 

Niente bisogno di fare in EditText in XML, tutto sarà lavoro e nessuna messa a fuoco apparirà.

Guarda la vita reale codice di esempio:

<activity 
     android:name=".MainActivity" 
     android:windowSoftInputMode="stateHidden" 
     android:label="@string/app_name" 
     > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 
0
<LinearLayout 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:layout_width="0px" 
    android:layout_height="0px" /> 

<EditText android:text="" 
    android:id="@+id/EditText01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:hint="@string/hint"> 
</EditText> 

Nessun altro codifica necessaria, è una soluzione semplice e chiaro.

2

Se si desidera cancellare il focus di default sul testo di modifica quindi utilizzare i seguenti 2 attributi

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

all'interno del genitore di layout lineare.

ad esempio:

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


    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="email id" 
     android:inputType="textEmailAddress" 
     android:maxLines="1" 
    /> 

</LinearLayout> 

Se si desidera nascondere la tastiera sulla creazione di attività di utilizzare questi attributi all'interno manifestano tag attività di file ad esempio:

<activity 
    android:configChanges="screenSize|orientation|keyboardHidden" 
    android:screenOrientation="portrait" 
    android:name=".activities.LoginActivity" 
    android:windowSoftInputMode="stateHidden|adjustResize"/> 

Se si desidera nascondere la tastiera sul pulsante clic o su alcuni eventi si verificano utilizzare il seguente codice

public void onClick(View v) { 
       try { 
        //InputMethodManager is used to hide the virtual keyboard from the user after finishing the user input 
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        if (imm.isAcceptingText()) { 
         imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
        } 
       } catch (NullPointerException e) { 
        Log.e("Exception", e.getMessage() + ">>"); 
       } 
        } 
       } catch (NullPointerException e) { 
        Log.e("Exception", e.getMessage() + ">>"); 
       } 

Se si vuole togliere il focus dalla modifica dei campi di testo dopo aver lasciato l'attività

@Override 
    protected void onResume() { 
     super.onResume(); 
     mEmail.clearFocus(); 
     mPassword.clearFocus(); 
} 

Ed infine se si desidera cancellare i dati nei campi di modifica di testo sul presentando l'uso modulo

@Override 
    protected void onResume() { 
     super.onResume(); 
     mEmail.getText().clear(); 
     mPassword.getText().clear(); 
    } 
1

È possibile utilizzare la modalità di ingresso morbido finestra nascosta per nascondere la tastiera e android:focusable="false" e android:focusableInTouchMode="true"

<activity 
    android:name=".MainActivity" 
    android:windowSoftInputMode="stateHidden" 
    android:label="@string/app_name" 
    > 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
Problemi correlati