2010-05-07 7 views

Antwort

16

Nun ... da alle Ansichten einen Verweis auf die Aktivität haben, die sie erstellt hat (Context), können Sie Context verwenden, um eine Referenz des Fensters zu erhalten. Lassen Sie mich Ihnen dieses Beispiel, das ich vor einigen Minuten schrieb:

// 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); 
    } 
} 

Dann Sie innerhalb Ihrer Ansicht nach kann dies tun:

// 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 diesem Fall wechsle ich den Modus um das Fenster zu Vollbild angezeigt wird . Hoffe das hilft dir. Sag mir, wenn du damit in Schwierigkeiten kommst.

+2

Vielen Dank für Ihre Antwort. Es war eine gute Idee, getWindow zu verwenden und zu einer Aktivität zu casten. Ich nehme an, Sie wissen nicht, warum ein 'IBinder' zurückgegeben wird und nicht ein' Window'? – Casebash

+1

Hallo Casidiablo, es gibt ein Problem mit Ihrem Code. Dies ist nur für Ansichten möglich, die Sie in Ihrem eigenen Code so erstellen, dass der Kontext, den Sie in Ihrem benutzerdefinierten Konstruktor verwenden, eine Aktivität ist. Ich habe versucht, die getContext-Methode eines Elements von einem ListAdapter und in diesem Fall bekomme ich einen Kontext, keine Aktivität. Aktivität ist eine Unterklasse von Context. Dies bedeutet, dass Sie ein Context-Objekt abrufen können, das nicht in eine Aktivität gegossen werden konnte. Mein Testcode endete in einer ClassCastException. – Janusz

+76

Irreführende Antwort. Nicht alle Ansichten werden in Aktivität verwendet! Einige Ansichten befinden sich in PopupMenu oder Dialog oder AppWidgetProvider. Sie erhalten eine Ausnahme oder ein falsches Fenster. Dialog hat ein eigenes Fenster. Überarbeiten Sie Ihre Antwort. –

Verwandte Themen