2011-11-03 9 views
6

Ho un EditText (che l'utente può digitare numeri in), così quando l'utente fa clic sulla casella di testo EditText viene aperta una tastiera con numeri.Android: la tastiera si sovrappone a EditText (con schermi di stampa)

This is how it looks when the text box is clicked

come si può vedere la tastiera nasconde una piccola parte della casella di testo.

Ma quando premo un tasto, ad esempio, 0, sembra ok.

C'è qualcosa che posso fare (oltre a mettere il Testo in alto) così come sarà nella seconda foto?

Edit: il codice .xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:weightSum="1"> 
    <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content"> 
    <LinearLayout android:layout_width="wrap_content" android:orientation="vertical" android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignParentRight="true"> 
     <android.widget.CheckedTextView android:id="@+id/checkedTextView1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textSize="17sp" android:text="@string/toString"></android.widget.CheckedTextView> 
     <AutoCompleteTextView android:layout_height="wrap_content" android:id="@+id/autoCompleteTextView1" android:layout_width="fill_parent" android:text="@string/emptyString" android:textSize="17sp" android:gravity="top|left" android:minHeight="62dp"> 
      <requestFocus></requestFocus> 
     </AutoCompleteTextView> 
     <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout2"> 
      <Button android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="0.33333333333" android:text="@string/contactsString" android:textSize="17sp" android:id="@+id/contactsButton"></Button> 
      <Button android:layout_weight="0.33333333333" android:layout_height="wrap_content" android:text="@string/groupsString" android:layout_width="fill_parent" android:id="@+id/groupsButton" android:textSize="17sp"></Button> 
      <Button android:layout_weight="0.33333333333" android:layout_height="wrap_content" android:text="@string/favouritesString" android:layout_width="fill_parent" android:id="@+id/button3" android:textSize="17sp"></Button> 
     </LinearLayout> 
     <TextView android:id="@+id/textView1" android:text="@string/messageString" android:layout_height="wrap_content" android:textSize="17sp" android:layout_width="fill_parent"></TextView> 
     <EditText android:layout_height="wrap_content" android:id="@+id/editText1" android:layout_width="fill_parent" android:gravity="top|left" android:minHeight="105dp"></EditText> 
     <TextView android:id="@+id/textView2" android:text="@string/repetition" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textSize="17sp"></TextView> 
     <Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/spinner"></Spinner> 
     <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout3" android:layout_width="fill_parent"> 
      <ImageView android:src="@drawable/button_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView1" android:layout_weight="0.1"></ImageView> 
      <EditText android:layout_height="wrap_content" android:id="@+id/timeET" android:inputType="number" android:layout_width="wrap_content" android:layout_weight="0.4"></EditText> 
      <ImageView android:src="@drawable/button_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView2" android:layout_weight="0.1"></ImageView> 
      <EditText android:layout_height="wrap_content" android:id="@+id/dateET" android:inputType="number" android:layout_width="wrap_content" android:layout_weight="0.4" android:layout_marginRight="3dp"></EditText> 
     </LinearLayout> 
     <RelativeLayout android:id="@+id/relativeLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
      <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/linearLayout4" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_alignParentLeft="true"> 
       <Button android:layout_weight="0.5" android:layout_height="wrap_content" android:text="@string/button_ok" android:layout_width="fill_parent" android:id="@+id/button4" android:textSize="17sp"></Button> 
       <Button android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/button5" android:layout_weight="0.5" android:text="@string/button_cancel" android:textSize="17sp"></Button> 
      </LinearLayout> 
     </RelativeLayout> 
    </LinearLayout> 
</RelativeLayout> 

</LinearLayout> 

risposta

18

Ho provato il tuo XML e sì hai ragione il problema si verifica.

Per risolvere il problema, ho scritto questa riga nel mio MainActivity.java spero che questo sia di aiuto, E metto il layout XML in ScrollView.

Attività

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.temp); 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 

     final EditText time = (EditText)findViewById(R.id.timeET); 
     time.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       time.requestLayout(); 
       MyActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED); 

       return false; 
      } 
     }); 
     final EditText date = (EditText)findViewById(R.id.dateET); 
     date.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       time.requestLayout(); 
       MyActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED); 

       return false; 
      } 
     }); 
     } 

And The XML è come,

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

     <ScrollView android:id="@+id/scrollView1" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:weightSum="1"> 
--- 
--- 
--- 
     </ScrollView> 
</LinearLayout> 
+0

Ci proverò più tardi oggi o domani mattina e ti farò sapere come funziona. Grazie! – Belgi

+0

p.s: intendevi scrivere date.requestLayout(); a date.setOnTouchListener? – Belgi

+0

@Frankenstein hehe bene grazie mille per il commento. Volevo cancellare la mia risposta ora ma il tuo commento mi ha impedito! Ad ogni modo ho risposto in modo approssimativo, ho pensato che una ScrollView di root avrebbe risolto il problema. Sembra che mi sbaglio Perché abbiamo bisogno del root LinearLayout nella tua risposta? Non sono molto interessato ai dettagli di questa domanda, ma penso che gli ascoltatori di OnFocus siano la scelta giusta. In ogni caso non posso commentare i dettagli di cui ho goduto il mio weekend. Grazie ancora !! +1 –

2

si può dare alcuni suggerimenti per il sistema su come gestire questa via Android: elemento windowSoftInputMode sull'attività dichiarato nella AndroidManifest. Prova il valore "adjustResize".

android:windowSoftInputMode

+0

Questo nasconde completamente la casella di testo EditText – Belgi

2

Situato android:windowSoftInputMode sull'attività di "adjustPan":

La finestra principale del attività non è ridimensionata per fare spazio per la tastiera virtuale. Piuttosto, il contenuto della finestra viene automaticamente spostato in modo che la messa a fuoco corrente non sia mai oscurata dalla tastiera e gli utenti possano sempre vedere che cosa stanno digitando.

Attenzione con one potential bug quando si utilizza questa tecnica con un'attività a schermo intero.

+0

Una spiegazione più visiva delle diverse modalità di input, tra cui quello suggerito sopra - che dovrebbe fare il trick-, può essere trovato [qui ] (http://developer.android.com/resources/articles/on-screen-inputs.html). –

+0

Sembra esattamente come nella prima immagine:/ – Belgi

3

messo l'intera vista all'interno di uno ScrollView e impostare il android:windowSoftInputMode = adjustPan che farà il trucco.

basta aggiungere questo pezzo di codice,

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

Your linear layout here.... 

</ScrollView> 

ho provato sul mio HTC Desire e il suo bel lavoro per me spero che funzionerà anche per te.

+0

Puoi aiutarmi con come rendere il layout a ScrollView? Aggiungerò il codice .xml in un secondo – Belgi

+0

L'ho cambiato in ScrollView ma ha incasinato ancora di più il look ... – Belgi

1

provare a cambiare il layout lineare per scorrere vista ... in modo che se la tastiera viene sopra testo utente editt può scorrere e tipo ...

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:weightSum="1"> 
<RelativeLayout android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" android:layout_height="wrap_content"> 
    <LinearLayout android:layout_width="wrap_content" 
     android:orientation="vertical" android:layout_height="wrap_content" 
     android:id="@+id/linearLayout1" android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true"> 
     <android.widget.CheckedTextView 
      android:id="@+id/checkedTextView1" android:layout_height="wrap_content" 
      android:layout_width="fill_parent" android:textSize="17sp"></android.widget.CheckedTextView> 
     <AutoCompleteTextView android:layout_height="wrap_content" 
      android:id="@+id/autoCompleteTextView1" android:layout_width="fill_parent" 
      android:textSize="17sp" android:gravity="top|left" 
      android:minHeight="62dp"> 
      <requestFocus></requestFocus> 
     </AutoCompleteTextView> 
     <LinearLayout android:layout_width="fill_parent" 
      android:layout_height="wrap_content" android:id="@+id/linearLayout2"> 
      <Button android:layout_height="wrap_content" 
       android:layout_width="fill_parent" android:layout_weight="0.33333333333" 
       android:textSize="17sp" android:id="@+id/contactsButton"></Button> 
      <Button android:layout_weight="0.33333333333" 
       android:layout_height="wrap_content" android:layout_width="fill_parent" 
       android:id="@+id/groupsButton" android:textSize="17sp"></Button> 
      <Button android:layout_weight="0.33333333333" 
       android:layout_height="wrap_content" android:layout_width="fill_parent" 
       android:id="@+id/button3" android:textSize="17sp"></Button> 
     </LinearLayout> 
     <TextView android:id="@+id/textView1" android:layout_height="wrap_content" 
      android:textSize="17sp" android:layout_width="fill_parent"></TextView> 
     <EditText android:layout_height="wrap_content" android:id="@+id/editText1" 
      android:layout_width="fill_parent" android:gravity="top|left" 
      android:minHeight="105dp"></EditText> 
     <TextView android:id="@+id/textView2" android:layout_height="wrap_content" 
      android:layout_width="fill_parent" android:textSize="17sp"></TextView> 
     <Spinner android:layout_width="fill_parent" 
      android:layout_height="wrap_content" android:id="@+id/spinner"></Spinner> 
     <LinearLayout android:layout_height="wrap_content" 
      android:id="@+id/linearLayout3" android:layout_width="fill_parent"> 
      <ImageView android:layout_width="wrap_content" 
       android:layout_height="wrap_content" android:id="@+id/imageView1" 
       android:layout_weight="0.1"></ImageView> 
      <EditText android:layout_height="wrap_content" android:id="@+id/timeET" 
       android:inputType="number" android:layout_width="wrap_content" 
       android:layout_weight="0.4"></EditText> 
      <ImageView android:layout_width="wrap_content" 
       android:layout_height="wrap_content" android:id="@+id/imageView2" 
       android:layout_weight="0.1"></ImageView> 
      <EditText android:layout_height="wrap_content" android:id="@+id/dateET" 
       android:inputType="number" android:layout_width="wrap_content" 
       android:layout_weight="0.4" android:layout_marginRight="3dp"></EditText> 
     </LinearLayout> 
     <RelativeLayout android:id="@+id/relativeLayout2" 
      android:layout_width="fill_parent" android:layout_height="fill_parent"> 
      <LinearLayout android:layout_width="wrap_content" 
       android:layout_height="wrap_content" android:id="@+id/linearLayout4" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentLeft="true"> 
       <Button android:layout_weight="0.5" android:layout_height="wrap_content" 
        android:layout_width="fill_parent" android:id="@+id/button4" 
        android:textSize="17sp"></Button> 
       <Button android:layout_height="wrap_content" 
        android:layout_width="fill_parent" android:id="@+id/button5" 
        android:layout_weight="0.5" android:textSize="17sp"></Button> 
      </LinearLayout> 
     </RelativeLayout> 
    </LinearLayout> 
</RelativeLayout> 

si prega di fare i cambiamenti necesscery ... Ho rimosso e stringhe src drawable per il mio convience..u bisogno di cambiare il layout lineare prima a scrollview..try senza questo Android: windowSoftInputMode = adjustPan

+0

L'ho cambiato in ScrollView ma ha incasinato l'aspetto ancora di più ... – Belgi

+0

ho modificato ... per favore guarda oltre – Rockin

5

Cambia per ScrollView in questo modo:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:weightSum="1" > 
     <RelativeLayout 
      android:id="@+id/relativeLayout1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 
      <LinearLayout 
       android:layout_width="wrap_content" 
       android:orientation="vertical" 
       android:layout_height="wrap_content" 
       android:id="@+id/linearLayout1" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentRight="true" > 
       <android.widget.CheckedTextView 
        android:id="@+id/checkedTextView1" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:textSize="17sp" 
        android:text="@string/toString" /> 
       <AutoCompleteTextView 
        android:layout_height="wrap_content" 
        android:id="@+id/autoCompleteTextView1" 
        android:layout_width="fill_parent" 
        android:text="@string/emptyString" 
        android:textSize="17sp" 
        android:gravity="top|left" 
        android:minHeight="62dp" > 
        <requestFocus></requestFocus> 
       </AutoCompleteTextView> 
       <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:id="@+id/linearLayout2" > 
        <Button 
         android:layout_height="wrap_content" 
         android:layout_width="fill_parent" 
         android:layout_weight="0.33333333333" 
         android:text="@string/contactsString" 
         android:textSize="17sp" 
         android:id="@+id/contactsButton" /> 
        <Button 
         android:layout_weight="0.33333333333" 
         android:layout_height="wrap_content" 
         android:text="@string/groupsString" 
         android:layout_width="fill_parent" 
         android:id="@+id/groupsButton" 
         android:textSize="17sp" /> 
        <Button 
         android:layout_weight="0.33333333333" 
         android:layout_height="wrap_content" 
         android:text="@string/favouritesString" 
         android:layout_width="fill_parent" 
         android:id="@+id/button3" 
         android:textSize="17sp" /> 
       </LinearLayout> 
       <TextView 
        android:id="@+id/textView1" 
        android:text="@string/messageString" 
        android:layout_height="wrap_content" 
        android:textSize="17sp" 
        android:layout_width="fill_parent" /> 
       <EditText 
        android:layout_height="wrap_content" 
        android:id="@+id/editText1" 
        android:layout_width="fill_parent" 
        android:gravity="top|left" 
        android:minHeight="105dp" /> 
       <TextView 
        android:id="@+id/textView2" 
        android:text="@string/repetition" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:textSize="17sp" /> 
       <Spinner 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:id="@+id/spinner" /> 
       <LinearLayout 
        android:layout_height="wrap_content" 
        android:id="@+id/linearLayout3" 
        android:layout_width="fill_parent" > 
        <ImageView 
         android:src="@drawable/button_time" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:id="@+id/imageView1" 
         android:layout_weight="0.1" /> 
        <EditText 
         android:layout_height="wrap_content" 
         android:id="@+id/timeET" 
         android:inputType="number" 
         android:layout_width="wrap_content" 
         android:layout_weight="0.4" /> 
        <ImageView 
         android:src="@drawable/button_date" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:id="@+id/imageView2" 
         android:layout_weight="0.1" /> 
        <EditText 
         android:layout_height="wrap_content" 
         android:id="@+id/dateET" 
         android:inputType="number" 
         android:layout_width="wrap_content" 
         android:layout_weight="0.4" 
         android:layout_marginRight="3dp" /> 
       </LinearLayout> 
       <RelativeLayout 
        android:id="@+id/relativeLayout2" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" > 
        <LinearLayout 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:id="@+id/linearLayout4" 
         android:layout_alignParentBottom="true" 
         android:layout_alignParentRight="true" 
         android:layout_alignParentLeft="true" > 
         <Button 
          android:layout_weight="0.5" 
          android:layout_height="wrap_content" 
          android:text="@string/button_ok" 
          android:layout_width="fill_parent" 
          android:id="@+id/button4" 
          android:textSize="17sp" /> 
         <Button 
          android:layout_height="wrap_content" 
          android:layout_width="fill_parent" 
          android:id="@+id/button5" 
          android:layout_weight="0.5" 
          android:text="@string/button_cancel" 
          android:textSize="17sp" /> 
        </LinearLayout> 
       </RelativeLayout> 
      </LinearLayout> 
     </RelativeLayout> 
    </LinearLayout> 
</ScrollView> 
+0

button_ok e button4 (questo pulsante Annulla) non sono più nel fondo dello schermo, e il keyboeard si apre senza un motivo ... – Belgi

+0

hai ' 'su' autoCompleteTextView1'. Quindi la tastiera deve aprirsi! 'button_ok' e' button4' sono l'ultima cosa nel tuo layout .. Quindi devono essere nella parte inferiore dello schermo. –

+0

Il codice pubblicato non apre il keyboared. è vero che questi pulsanti sono più bassi di ogni altra cosa presente sullo schermo, ma lo spazio tra l'ora e la data di EditText è scomparso, quindi i pulsanti sono più alti. – Belgi

1

Questa è una correzione molto più semplice che la risposta accettata. La chiave è la linea <item name="android:windowSoftInputMode">adjustUnspecified</item>. Aggiungerlo al tuo styles.xml:

<style name="AppTheme" parent="@android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:alertDialogTheme">@style/iconPopUpDialogTheme</item> 
</style> 

<style name="DialogAppTheme" parent="AppTheme"> 
    <item name="android:dialogTheme">@style/iconPopUpDialogTheme</item> 
</style> 

<style name="PopUpDialogTheme"> 
    <item name="android:windowSoftInputMode">adjustUnspecified</item> 
</style> 
Problemi correlati