2010-09-06 5 views
6

In che modo Android determina se spostare il layout quando viene visualizzato il softkey?In che modo Android determina se spostare il layout quando viene visualizzato il softkey?

Nota: Sono consapevole del fatto che la proprietà di attività android:windowSoftInputMode="adjustResize|adjustResize|adjustUnspecified" esiste, come descritto qui http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft , ma nel mio caso non sembra avere alcun effetto. Questo è il mio problema:

Ho due attività, praticamente lo stesso layout, ma il primo utilizza un elenco di pulsanti che contiene un elenco di pulsanti. La seconda attività contiene una vista a scorrimento con pulsanti. Il resto è lo stesso, lo stesso numero di pulsanti, stessa altezza degli elementi, ecc

Ora, quando si preme il pulsante di ricerca per aprire la barra di ricerca di ingresso, in mia prima attività, l'intero layout viene spostato su . Durante la seconda attività, il layout non viene spostato verso l'alto ma solo la softkey viene visualizzata sopra di essa. Questo è in realtà il modo in cui voglio che si comporti. Come posso ottenere lo stesso risultato con la mia attività che utilizza ListView?

Nel mio manifest, inizialmente non ho specificato alcun attributo android:windowSoftInputMode, ma anche se lo faccio, non fa alcuna differenza; Ho provato tutti e tre i valori (adjustPan, adjustResize, adjustUndefined, senza alcuna differenza).

Questo è il mio layout:

1) http://pastebin.com/5zzVxjbK

2) http://pastebin.com/KFtPuHvP

interessante notare, però: quando ho impostato la mia visibilità ListView nel mio layout 1 (a sinistra) a View.INVISIBLE, poi il layout non viene spostato!

alt text

+0

@Mathias Lin: Penso che devi pubblicare del codice. solo 'listview' e' scrollview' non fanno niente? My Guess dipende dal layout. – Praveen

+0

Ecco il codice, la 'sezione pulsante' è denominata android: id = "@ + id/category_questions" in entrambi i casi, non è sicuro se questa è la parte pertinente. 1) http://pastebin.com/5zzVxjbK, 2) http://pastebin.com/KFtPuHvP –

+0

Sì, sono sicuro che ha a che fare con il layout, ma come? I documenti per gli sviluppatori Android non dicono molto a riguardo. –

risposta

0

posso raggiungere questo obiettivo con un RelativeLayout e impostando android:windowSoftInputMode="adjustPan" in questo modo:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" > 

    <include android:id="@+id/Header" layout="@layout/header" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

    <ListView android:id="@+id/android:list" android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:layout_below="@id/Header" 
     android:layout_above="@+id/Footer" /> 

    <include android:id="@id/Footer" layout="@layout/footer" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 

Si può essere in grado di raggiungere questo impostando la gravità piè di pagina (o layout_gravity) per "basso" , se vuoi mantenere il LinearLayout, ma non ne sono sicuro.

+0

Ho altre attività (ad esempio contenente un listView che riempie lo schermo del 90%, con una piccola area per l'intestazione di una scheda) nella mia app in cui il layout esterno è un layout lineare e non ho riscontrato l'effetto. Lo vedo solo in alcune delle attività. Credo che il tuo layout sopra funzioni, ma mi piacerebbe capire la logica dietro di esso, quindi so come posso cambiare il LinearLayout esistente e/o cosa causa esattamente questo comportamento. Sono sicuro che ci sono soluzioni alternative, ma non voglio combattere i sintomi, ma piuttosto l'origine stessa. –

+0

Hai provato la gravità del footer (layout_gravity): "bottom" con "adjustPan"? –

+0

Sembra che ListViews siano "spostati in vista" a meno che non siano ancorati nella parte inferiore dello schermo e utilizzino adjustPan. Questo comportamento predefinito impedisce che le voci di elenco vengano coperte dalla tastiera virtuale. –

Problemi correlati