2010-12-01 9 views
6

Je découvre les dialogues Android et je suis confus quant à ce qui détermine leur taille. Si j'utilise ce XML pour ma mise en page de dialogue. . .Hauteur de la boîte de dialogue personnalisée Android

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <Button 
    android:id="@+id/AButton" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_marginLeft="10px" 
    android:text="Click Me to Dismiss" 
    /> 
    <TextView android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_toLeftOf="@id/AButton" 
    android:text="Click this button: " 
    /> 
    <ImageView 
    android:id="@+id/an_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="42px" 
    android:src="@drawable/screw50"> 
    </ImageView>  
    /> 

Je reçois cette boîte de dialogue. . .

alt text

Mais Developer.Android.com dit que ...

"WRAP_CONTENT, ce qui signifie que la vue veut être juste assez grand pour joindre son contenu (plus padding)"

... pourquoi la boîte de dialogue est-elle tellement plus haute qu'elle ne devrait l'être?

Si je remplace la hauteur de mise en page avec

android:layout_height="200px" 

il fait un dialogue bien court, mais je ne veux pas utiliser des hauteurs de pixels explicites (ce n'est pas une bonne pratique). Comment faire pour que le dialogue soit juste assez grand pour son contenu?

Répondre

7

Vous avez la hauteur de votre TextView pour fill_parent. Est-il possible que cela, combiné avec la hauteur du RelativeLayout à wrap_content pousse sa hauteur à la taille maximale? Que se passe-t-il si vous changez la hauteur de TextView en wrap_content?

Pour ajouter, the Android SDK indique que les enfants d'un RelativeLayout ne peuvent pas avoir de dépendance sur la mise en page, par exemple align_parent_bottom. Je suppose que fill_parent est une dépendance et donc brise la disposition.

+0

Hi , Ma question était un problème d'ops, je naviguais sur ce post et je voulais que le dialogue occupe autant d'espace que possible, est-ce la bonne façon de le faire, c'est-à-dire mettre un enfant de disposition relative pour remplir parent? – Naveed

+0

Je crois que vous êtes censé définir le RelativeLayout à fill_parent, dans cet exemple – AndrewKS

1

Hmm c'est étrange. J'utilise <LinearLayout/>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical" 
        android:background="@android:color/white"> 
<TextView android:id="@+id/message" 
       android:padding="5dp" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="10dp"/> 
    ... 
    </LinearLayout> 

Et il enveloppe le contenu de mon bien.

+1

Oui, je suis d'accord LinearLayout n'a pas ce problème. Mais je voulais utiliser RelativeLayout à cause du contrôle que cela me donne sur le placement. Y a-t-il une restriction ou un getcha sur RelativeLayout? (Je devrais mentionner que j'utilise Android 2.2 et ce problème se produit dans l'émulation et sur le téléphone réel.) –

+0

Pourquoi ne pas utiliser un RelativeLayout dans un LinearLayout? Et non je ne suis pas au courant de quoi que ce soit :( –

+1

"Pourquoi ne pas utiliser un RelativeLayout dans un LinearLayout?" Je pourrais essayer cela mais il semble que ce soit un hack, pas d'infraction, il doit y avoir un moyen de le faire fonctionner correctement –

1

J'ai travaillé sur le même problème les 2 derniers jours. Finalement, cela fonctionne correctement en utilisant certains attributs dans le style de mon dialogue.

est ici le style j'utilise:

<style name="SearchFieldSetterDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:gravity">bottom</item> 
</style> 

les attriubutes clés sont les suivants:

<item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 

le premier, je suppose, doit dire au WINDOWMANAGER de mettre Cadres autour de la boîte de dialogue et le second pour sortir l'espace réservé au titre du dialogue.

avec ce style et la mise en page suivante j'ai finalement eu ce travail:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

... 

</LinearLayout> 

mon problème avec une solution ths est que le android:windowIsFloating attriubute setted comme true et la plate-forme earlyer puis 3.0 je ne peux pas trouver un moyen pour faire le dialogue witdh pour remplir l'écran même si le layout_width est réglé comme fill_parent

espérons que cela aidera quelqu'un ...et sry pour mon mauvais anglais

+0

où vous définissez les attributs de style pour votre boîte de dialogue? –

+0

dans le constructeur: http://developer.android.com/reference/android/app /Dialog.html#Dialog(android.content.Context, int) –

+0

Oh oui, bien sûr, j'ai oublié! –