2010-08-03 19 views
14

Sto cercando di creare una finestra di dialogo personalizzata in Android. Ma qualunque cosa ho provato a fare, non sono in grado di modificare la larghezza della finestra di dialogo. Rimane solo lo stesso. La seguente è la vista che sto impostando come contenuto per la finestra di dialogo.Creazione di una finestra di dialogo personalizzata in Android

<RelativeLayout 
android:id="@+id/current_stats" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:visibility="visible"> 
<ImageView android:id="@+id/player_image" 
    android:src="@drawable/person" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"/> 
<TextView 
    android:id="@+id/player_name" 
    android:layout_below="@id/player_image" 
    android:layout_centerHorizontal="true" 
    android:text="Raja Ram" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<ImageButton android:id="@+id/dialog_close" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:background="#00000000" 
    android:src="@drawable/close_button_selector"/> 
<ImageButton android:id="@+id/dialog_flip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:background="#00000000" 
    android:src="@drawable/rotate"/> 
</RelativeLayout> 

Come potete vedere, ovunque sto usando wrap_content in questo esempio di codice. Inoltre ho provato le seguenti opzioni

1) Impostazione di uno stile personalizzato durante la creazione della finestra di dialogo come questa.

dialog = new Dialog(this,R.style.Theme_Dialog); 

E lo stile come segue

<resources> 
<style name="Theme" parent="android:Theme"> 
</style> 
<style name="Theme.Dialog"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
</style> 
</resources> 

2) Impostazione dei parametri per la visualizzazione nella onCreateDialog() Ti piace questa

LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
v = inflater.inflate(R.layout.player_info, null, false); 
ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
dialog.setContentView(v,p); 

3) Ho anche cercato di impostare la finestra parametri come questo nel metodo onCreateDialog()

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.width=WindowManager.LayoutParams.WRAP_CONTENT; 
dialog.getWindow().setAttributes(params); 

Ma ancora nessuna fortuna. Qualcuno può aiutarmi con questo problema. Sto facendo qualcosa di sbagliato?? Puoi anche suggerirmi come impostare le posizioni x e y per la finestra di dialogo?

Grazie

risposta

1

Ho capito il problema dopo molto tempo. Il problema era con il modo in cui ho usato il layout relativo. Immagino di non aver specificato correttamente la posizione relativa. Quando l'ho cambiato in layout lineare ha funzionato bene. Non stava usando l'intero schermo ma solo ciò che è richiesto.

2

è il tuo problema che ci vuole l'intera larghezza dello schermo, o che non si può controllare la quantità dello schermo è che prendendo?

Per rendere il vostro atto attività di dialogo, e non prendere il pieno con si dovrebbe impostare la vostra attività per avere il tema di dialogo nel manifesto:

<activity android:theme="@android:style/Theme.Dialog"> 

La finestra sarà grande come è richiesto dal tuo layout. Se vuoi che sia più ampio, è necessario ampliare il layout. (Regola le dimensioni delle immagini, aggiungi padding, ecc.).

Non sono a conoscenza di un modo per posizionare la finestra di dialogo .. Penso che sia sempre centrata, potrei sbagliarmi comunque.

+0

Grazie per la tua risposta. Il mio problema è che lo voglio più come una finestra pop-up. Invece di usare l'intera larghezza dello schermo, voglio solo che consumi solo la larghezza richiesta per mantenere la vista. E non sto avviando un'attività separata in quella finestra di dialogo. Sono interessato a mostrare una finestra che consente all'utente di eseguire alcune azioni e dovrebbe consentire alcune animazioni.Ho anche provato PopupWindow ma per qualche ragione, la mia animazione personalizzata non funzionava con la finestra popup. Spero di aver chiarito la mia richiesta. Hai qualche suggerimento? – rajaramyadhav

+0

Un'attività a tema di dialogo apparirà come una finestra a comparsa. Questa domanda mostra un esempio di come sarebbe: http://stackoverflow.com/questions/1967085/android-how-to-resize-dialog. –

0

ho potuto cambiare la larghezza, l'altezza e la posizione della finestra di dialogo utilizzando getWindow(). SetAttributes (params)

31
 dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar); 

     dialog.setContentView(R.layout.custom_dialog); 

     LayoutParams lp=dialog.getWindow().getAttributes();  
     lp.x=100;lp.y=100;lp.width=100;lp.height=200;lp.gravity=Gravity.TOP | Gravity.LEFT; 
     lp.dimAmount=0;    
     lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL; 
    // dialog.getWindow().setAttributes(lp); 

     dialog.show(); 

Questo ha funzionato bene per me ....

+0

Bella tecnica! –

+0

Bene. Grazie Hai risparmiato il mio tempo – Piraba

+0

Ha funzionato bene dopo un piccolo ritocco per soddisfare le mie esigenze +1 – user577732

-3

nel metodo onCreate() della tua classe di dialogo personalizzata fai il prossimo

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
getWindow().setLayout(x, y); 
} 
Problemi correlati