2012-02-06 16 views
18

Mi sono imbattuto in un problema un po 'strano con le attività che utilizzano il tema Holo Dialog (@android:style/Theme.Holo.Dialog) in Ice Cream Sandwich.Cosa c'è che non va nel tema Holo Dialog di ICS?

Sembra che ignorino i loro layout e riempiano l'intero schermo anziché la larghezza e l'altezza del layout dai loro layout XML. Gli stessi layout funzionano come previsto in Honeycomb, ma non su Ice Cream Sandwich.

Esempio:

Il modo corretto (Honeycomb) enter image description here

Il modo errato (Ice Cream Sandwich) enter image description here

Entrambi i dispositivi sono in esecuzione la stessa versione esatta della domanda, e stanno usando lo stesso identico layout. Ecco il layout in questione:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" 
    android:layout_width="940dp" 
    android:layout_height="600dp" 
    android:layout_margin="10dp" > 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="940dp" 
     android:layout_height="600dp" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:smoothScrollbar="true" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
    </GridView> 

</LinearLayout> 

Qualche idea su come questo può essere risolto? Un problema simile si verifica sul Galaxy Nexus basato su ICS, che ignora completamente il tag match_parent per l'altezza e la larghezza. Il tema del dialogo è rotto in ICS?

Aggiornamento:

ho fatto un po 'di test, e sembra che 894dp di larghezza o meno produrrà l'aspetto "corretto", ma se ho impostato la larghezza a 895dp o più, è' Sarà l'aspetto sbagliato. L'emulatore agisce allo stesso modo. Ciò è estremamente strano ...

enter image description here

+0

Sembra strano. Questo è uno sparo al buio, ma a volte proverò strani problemi grafici nella mia app dopo aver cambiato il Build Target. Non ho idea del perché, ma la pulizia del progetto li risolverà sempre. Come ho detto, sparato nell'oscurità, ma potrebbe essere così semplice. – adneal

+0

Grazie, ho appena provato di nuovo, ma non sembra avere alcun effetto. Ho appena aggiornato la mia domanda di nuovo - sembra che stia accadendo tra 894 e 895 dp di larghezza. –

+0

Le schermate vengono scattate utilizzando due dispositivi separati? Il tuo post presuppone che questo comportamento funzioni sempre correttamente su HoneyComb ma non su ICS, ma è possibile che il problema riscontrato dipenda interamente dalle dimensioni dello schermo? In caso contrario, si potrebbe prendere in considerazione la creazione di due AVD (uno in esecuzione 3.0 e un altro in esecuzione 4.0) con le stesse dimensioni dello schermo e testarlo con i due per determinare se il problema dipende dal numero di versione dell'SDK di Android. –

risposta

6

Non penso sia vero che ICS scoraggi i dialoghi. In effetti, hanno un intero page at Android Design. Ciò che è vero è che lo DialogFragment (che è anche fornito nello Android Support library) è preferito rispetto all'eredità Dialog.

Confermando la tua osservazione sulla finestra di dialogo che si apre a schermo intero, ma il comportamento dipende dal dispositivo. Sul mio tablet Xoom succede a 915 dp, non a 895. Sul mio Galaxy Nexus, succede a 444 dp. E sul mio Galaxy Tab 10.1, non succede affatto.

Se si scava nella fonte, è possibile vedere che esiste un tema di dialogo che viene discusso da Holo per schermi più piccoli e da Holo.Dialog.FixedSize per quelli più grandi. Mi sarei aspettato che questo fosse basato sulla dimensione del display, non sulla dimensione del layout, ma forse mi sarei sbagliato. Proverò a capire cosa causa il salto.

+0

Grazie, sarebbe eccellente! Non conoscevo nemmeno il tema Holo.Dialog.FixedSize. –

+0

Sto vedendo questo stesso problema: un'attività a tema che utilizza Theme.Holo.Light. Il tema Dialog.NoActionBar si comporta correttamente su JellyBean ma presenta il problema "eccesso di dimensioni" sopra in ICS. –

1

non riuscivo a trovare una risposta per questo me stesso, così alla fine ho lasciato cadere il tema di dialogo e invece usato un layout tema standard di grande ampiezza. Penso che ICS scoraggi l'uso dei dialoghi, quindi forse è per questo che è cambiato.

0

Tutte le versioni di Android ignorano la larghezza/altezza di un layout di finestre di dialogo xml.

Per risolvere questo problema, dopo aver chiamato:

setContentView(R.layout.contacts_preferences); 

aggiungere una riga:

getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 

o WRAP_CONTENT per le vostre esigenze.

+0

No, non lo fanno. Come ho detto, funziona perfettamente in Honeycomb. –

0

Provare a scambiare il LinearLayout per un RelativeLayout. Quello farà il trucco :)

In qualche modo LinearLayouts riempie sempre lo schermo quando visualizzato in una finestra di dialogo. RelativeLayouts no.

Problemi correlati