2015-06-09 7 views
11

Sto utilizzando l'SDK di Android per creare un gioco. Lungo la strada, ho bisogno di visualizzare popup/dialog come qualsiasi altro gioco che l'utente può aggiornare o qualsiasi altra cosa. Il problema che ho è con la dimensione della finestra di dialogo. Sto usando RelativeLayout e sto impostando lo sfondo dell'immagine che ho con "wrap_content".La dimensione della finestra di dialogo non corrisponde all'immagine di sfondo

Il problema che la finestra di dialogo sta prendendo la dimensione delle viste all'interno (o la dimensione minima della finestra di dialogo predefinita impostata da Android, a seconda di quale è maggiore) NON è l'immagine di sfondo. Se uso fill_parent, lo allunga. Ho passato ore e ore a girare il mio tempo e non riesco a trovare un modo efficiente in cui la dimensione della finestra corrisponda alle dimensioni dell'immagine di sfondo

Qualche suggerimento? Questo è un caso d'uso molto comune e deve esserci modo! Grazie

Ecco alcuni dei contenuti di layout

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/popup" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <ImageButton 
     android:id="@+id/ibCloseDialog" 
     android:background="@null" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/close" /> 

<Button 
     android:id="@+id/b1" 
     android:background="@drawable/blue_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@+id/b2" 
     android:text="b1" /> 
    <Button 
     android:id="@+id/b2" 
     android:background="@drawable/blue_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:text="b2" /> 
    <Button 
     android:id="@+id/b3" 
     android:background="@drawable/blue_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/b2" 
     android:text="b2" /> 
</RelativeLayout> 
+0

Ci deve essere qualcuno che ha affrontato questo prima – Snake

+0

Prova a usare 'MATCH_PARENT' – alexandreferris

+0

Dai un'occhiata a questo asnwer, potrebbe aiutarti. http://stackoverflow.com/a/6631310/2071847 – alexandreferris

risposta

0

Stai usando un "android: background" atribute nella tua RelativeLayout? Se questo è il caso si può provare a fare questo:

<RelativeLayout 
     . 
     . 
     . 
     > 
     <ImageView 
      android:layout_width="MATCH_PARENT" 
      android:layout_height="MATCH_PARENT" 
      android:scaleType="fitXY" 
      android:adjustViewBounds="true" 
      android:src="@drawable/yourDrawable" />  
    </RelativeLayout> 
  1. porre ImageView all'interno del layout relativo.
  2. rimuovere l'immagine di sfondo del vostro RelativeLayout
  3. Impostare lo src del ImageView per l'immagine di sfondo

anche:

  • rendere le immagini di dimensioni correttamente del tuo background e tenerli in diversi drawable cartelle.
  • specificare la dimensione della vista non usando le costanti, ma in dp
+0

Il problema che questo non funzionerà. Perché sto posizionando il contenuto nel relativo layout utilizzando attributi come alignParentLeft e alignParentBottom. Quando lo fai, allora la finestra di dialogo va oltre la dimensione dell'immagine e posiziona i componenti all'esterno. – Snake

0

mettere una singola immagine di grandi dimensioni nella cartella e l'uso seguente framelayout. Aggiungi a imgView

android:scaleType = "centerCrop" 
0

Non sono sicuro se questa è una soluzione efficiente, ma dal momento che lo sfondo finestra di dialogo è un file di risorse, si potrebbe ottenere l'altezza e la larghezza del fondo e si imposta la stessa altezza e larghezza per Dialog dinamicamente . Qualcosa di simile

//get the dialog background drawable 
Drawable popUpDrawable = getResources().getDrawable(R.drawable.popup); 
//get height and width of drawable 
int drawableWidth = popUpDrawable.getIntrinsicWidth(); 
int drawableHeight = popUpDrawable.getIntrinsicHeight(); 

//creating dialog 
Dialog dialog = new Dialog (context); 
... 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
lp.copyFrom(dialogWindow.getAttributes()); 
//set the height and width of drawable as height and width of dialog 
lp.width = drawableWidth; 
lp.height = drawableHeight; 
dialog.show(); 
//set the attributes to dialog 
dialog.getWindow().setAttributes(lp); 
0

Si imposta l'immagine utilizzando l'attributo src. Ti suggerirei di impostare come sfondo.

 <ImageButton 
      android:id="@+id/ibCloseDialog" 
      android:background="@null" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      scaltype:centerInside 
      android:background="@drawable/close" /> 
+0

No, non fa la differenza. L'impostazione di fondo come sfondo allunga ancora di più l'immagine – Snake

2

Una volta si è verificato un problema per visualizzare una finestra di dialogo a schermo intero. Ho usato uno stile personalizzato per rimuovere lo stile predefinito delle finestre di dialogo (dimensione/margine/riempimento). Quindi potresti usare questo per avvolgere il tuo contenuto ignorando le impostazioni predefinite. Quindi, per favore provare quanto segue:

1) Aggiungere una finestra di dialogo tema personalizzato nella vostra styles.xml:

<style name="YourDialogTheme" parent="android:Theme.Dialog"> 

    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 

    <item name="android:windowBackground">@null</item> 
    <item name="android:windowNoTitle">false</item> 

</style> 

penso che l'altezza, la larghezza e lo sfondo sono gli aspetti importanti qui. Forse devi giocare con i valori.

2) Creare la finestra di dialogo utilizzando questo frammento:

Dialog dialog = new Dialog(context, R.style.YourDialogTheme) 
+0

Proverò a farlo e riferirò. Ma non sono le dimensioni impostate nel codice della classe di dialogo di base Not the xml? – Snake

+0

Sì e no. La finestra di dialogo ha due costruttori, Dialogo (Contesto ctx) e Dialogo (Contesto ctx, stile int). Se si utilizza il primo, verrà utilizzato lo stile predefinito.xml. È possibile impostare gli attributi di stile a livello di codice, ma in questo modo si stanno modificando/alterando quelli che sono stati impostati sulla creazione della finestra di dialogo (prima xml, quindi il codice). Utilizzando un xml personalizzato, i tuoi attributi vengono impostati dall'inizio. – W3hri

+0

Ancora. Stesso comportamento. Penso che in realtà non sia correlato al fatto che alignParentRight per l'immagine sta forzando il layout ad essere esteso a tutta larghezza anche se il layout relativo genitore è impostato per avvolgere il contenuto. Sembra che stia avendo lo stesso identico problema di http://stackoverflow.com/questions/17446229/android-relative-layout-align-parent-right ma ancora nessuna soluzione :( – Snake

0

mi sono imbattuto in un problema simile. Android non ama RelativeLayout per ridimensionare in base ai suoi figli quando i suoi figli si allineano alla sua destra o in basso. Questo è considerato un "riferimento circolare", anche se sono d'accordo sul fatto che ci sarebbero validi casi d'uso per la stesura di questo modo. Ho lavorato intorno a questo utilizzando un FrameLayout:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="..." /> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     [ other views with their relative layout parameters] 
    </RelativeLayout> 
</FrameLayout> 

in questo layout, il FrameLayout dovrebbe ottenere la sua dimensione dal punto di vista dell'immagine, allora il RelativeLayout corrisponde a quella.

+0

Sono quasi sicuro di averlo provato prima, ma io proverò di nuovo e riferire – Snake

Problemi correlati