【问题标题】:How to call getWindow() using a method from a listener如何使用来自侦听器的方法调用 getWindow()
【发布时间】:2011-08-27 00:39:00
【问题描述】:

我正在使用 getwindow 在我的 onCreate 中的一堆活动的开头设置很多东西。我想用如下方法替换它:

    public static void initializeScreen (Activity This){
    This.requestWindowFeature(Window.FEATURE_NO_TITLE);
    if (global.notBarOnOff == true) {
        This.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        This.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);}
    //Keeps Screen on
    This.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    // Controls Screen Brightness
    Settings.System.putInt(This.getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
    final WindowManager.LayoutParams settings = This.getWindow().getAttributes();
    settings.screenBrightness = (float) 0.10;   
    This.getWindow().setAttributes(settings);
}

现在我认为调用 SCREEN_Controller.initializeScreen(this) 就可以了

后来我让用户按一个按钮来改变亮度。

bLight.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            settings.screenBrightness = (float) 1;
            getWindow().setAttributes(settings);

我知道要使用我的 initializeScreen 我必须将以下内容添加到我的侦听器中

WindowManager.LayoutParams settings = This.getWindow().getAttributes();

所以我想用我的 SCREEN_Controller 类中的方法替换它。问题是我不能使用之前使用的 (Activity This),因为它不允许我使用 new 调用 setOnClickListener 中的 Activity。我做错了什么?

【问题讨论】:

    标签: android methods android-activity listener window-managers


    【解决方案1】:

    您可以像这样(:-))在内部类中引用活动this

    YourClassName.this
    

    还有两个注意事项:

    • 在 Java 中,有 this(全部小写),而不是 This
    • 不用写this.getWindow().getAttributes();,你可以写getWindow().getAttributes();。作为一般规则,如果没有在较低范围内声明同名变量,则可以引用不带this 的变量。

    简短示例:

    public class DontMissTwice extends Activity {
    
        @override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.shaving);
            TextView knife = (TextView)findViewById(R.id.knife);
            knife.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    View.OnClickListener thisListener = this; // refers to View.OnClickListener's object
                    DontMissTwice thisDontMissTwice = DontMissTwice.this // refers to DontMissTwice's object
                }
            });
        }
    }
    

    【讨论】:

    • YourClassName.this 运行良好。我在我的方法中使用 This 来提醒我在调用它时使用“this”。我不确定是否完全清楚我把一种方法放在最上面,而不是我在我的活动中使用的方法。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多