2010-05-07 17 views

risposta

16

Bene ... poiché tutte le viste hanno un riferimento dell'attività che li ha creati (Context), è possibile utilizzare tale Context per ottenere un riferimento della finestra. Lasciate che vi mostri questo esempio ho scritto qualche giorno fa:

// main activity 
import android.app.Activity; 
import android.os.Bundle; 
public class GetWindow extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyView view = new MyView(this); 
     view.changeSomethingInWindow(); // keep an eye on this method 
     setContentView(view); 
    } 
} 

Poi, all'interno della vostra vista si può fare questo:

// your view :D 
import android.app.Activity; 
import android.content.Context; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 

public class MyView extends View{ 
    public MyView(Context context) { 
     super(context); 
    } 

    public void changeSomethingInWindow(){ 
     // get a reference of the activity 
     Activity parent = (Activity)getContext(); 
     // using the activity, get Window reference 
     Window window = parent.getWindow(); 
     // using the reference of the window, do whatever you want :D 
     window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
} 

In questo caso, a cambiare la modalità della finestra viene visualizzata a tutto schermo . Spero che questo ti aiuti. Dimmi se ti metti nei guai con questo.

+2

Grazie per la risposta. Usare getWindow e lanciare un'attività è stata una buona idea. Suppongo che tu non sappia perché viene restituito un 'IBinder' piuttosto che una 'Finestra'? – Casebash

+1

Ciao Casidiablo, c'è un problema con il tuo codice. Questo è possibile solo per le viste create nel proprio codice in modo che il contesto che si utilizza nel costruttore personalizzato sia un'attività. Ho provato il metodo getContext di un oggetto da un ListAdapter e in questo caso ottengo un contesto non un'attività. L'attività è una sottoclasse di Contesto, ciò significa che puoi ottenere un oggetto Contesto che non può essere castato in un'attività. Il mio codice di prova è terminato con ClassCastException. – Janusz

+76

Risposta fuorviante. Non tutte le visualizzazioni sono utilizzate in Attività! Alcune visualizzazioni sono in PopupMenu o Dialog o AppWidgetProvider. Otterresti un'eccezione o una finestra errata. La finestra di dialogo ha una sua finestra. Rivedi la tua risposta. –

Problemi correlati