2010-05-07 31 views

Trả lời

16

Vâng ... vì tất cả các chế độ xem đều có tham chiếu đến hoạt động đã tạo chúng (Context), bạn có thể sử dụng số Context đó để tham chiếu cửa sổ. Hãy để tôi chỉ cho bạn ví dụ này tôi đã viết một vài phút trước:

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

Sau đó, bên trong cái nhìn của bạn, bạn có thể làm điều này:

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

Trong trường hợp này, tôi thay đổi chế độ cửa sổ được hiển thị cho toàn màn hình . Hy vọng điều này sẽ giúp bạn. Cho tôi biết nếu bạn gặp rắc rối với điều này.

+2

Cảm ơn câu trả lời của bạn. Sử dụng getWindow và truyền đến một hoạt động là một ý tưởng hay. Tôi không cho rằng bạn biết tại sao một 'IBinder' được trả về thay vì một' Cửa sổ'? – Casebash

+1

Xin chào Casidiablo, đã xảy ra sự cố với Mã của bạn. Điều này chỉ có thể cho các khung nhìn bạn tạo trong mã của riêng bạn theo cách mà bối cảnh mà bạn sử dụng trong hàm tạo tùy chỉnh của bạn là một hoạt động. Tôi đã thử phương thức getContext của một Item từ một ListAdapter và trong trường hợp này tôi nhận được một Context không phải là một Activity. Hoạt động là một lớp con từ Ngữ cảnh, điều này có nghĩa là bạn có thể nhận được một đối tượng Ngữ cảnh không thể được đưa vào một Hoạt động. Mã thử nghiệm của tôi đã kết thúc trong một ClassCastException. – Janusz

+76

Câu trả lời gây hiểu lầm. Không phải tất cả các chế độ xem đều được sử dụng trong Hoạt động! Một số chế độ xem có trong PopupMenu hoặc Dialog hoặc AppWidgetProvider. Bạn sẽ nhận được ngoại lệ cast hoặc Window sai. Hộp thoại có cửa sổ riêng. Sửa lại câu trả lời của bạn. –

Các vấn đề liên quan