java - 如何在选中复选框时进行全屏 Activity

标签 java android fullscreen

我正在尝试在我的应用程序中进行设置,以便当用户选中一个框时应用程序会全屏显示,但每次我运行该 Activity 时它都会强制关闭:

CheckBox FullScreen;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.settings);

    if (FullScreen.isChecked()) {
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}

我怎样才能实现期望的行为?
这是我的 logcat 错误:

08-20 23:09:23.328: E/AndroidRuntime(30491): FATAL EXCEPTION: main
08-20 23:09:23.328: E/AndroidRuntime(30491): Process: com.jason.payday, PID: 30491
08-20 23:09:23.328: E/AndroidRuntime(30491): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jason.payday/com.jason.payday.settings}: java.lang.NullPointerException
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2334)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.ActivityThread.access$900(ActivityThread.java:169)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.os.Looper.loop(Looper.java:146)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.ActivityThread.main(ActivityThread.java:5487)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at java.lang.reflect.Method.invokeNative(Native Method)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at java.lang.reflect.Method.invoke(Method.java:515)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at dalvik.system.NativeStart.main(Native Method)
08-20 23:09:23.328: E/AndroidRuntime(30491): Caused by: java.lang.NullPointerException
08-20 23:09:23.328: E/AndroidRuntime(30491):    at com.jason.payday.settings.onCreate(settings.java:42)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.Activity.performCreate(Activity.java:5451)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
08-20 23:09:23.328: E/AndroidRuntime(30491):    at           android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
08-20 23:09:23.328: E/AndroidRuntime(30491):    
... 11 more

最佳答案

您有两个问题:

  1. 如何使 Activity 全屏显示?
  2. 为什么我的应用会因空指针而崩溃?

这两个都是

CheckBox FullScreen;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setcontentview(R.layout.settings);
    // initialize the checkbox, else nullpointer in if-condition (q2)
    FullScreen = (CheckBox)findViewById(R.id.myFullscreenCheckbox);
    if (FullScreen.isChecked()) {
        // make app fullscreen (q1)
        this.getWindow().setFlags(
                    WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN
        );
        setcontentview(R.layout.settings);
    }
}

但话又说回来,这段代码有点无用,因为该复选框始终初始化为 true 或 false,具体取决于您的 xml。您应该使用 SharedPrefernces 来保留设置并在应用程序启动后加载它们。快速教程。

获取全屏设置:

boolean fullscreen = 
    getSharedPreferences("settings", MODE_PRIVATE).getBoolean("fullscreen", false);

保存全屏设置:

boolean fullscreen = mycheckbox.isChecked();
getSharedPreferences("settings", MODE_PRIVATE).edit().putBoolean("fullscreen", fullscreen).commit();

关于java - 如何在选中复选框时进行全屏 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25418959/

相关文章:

android - 尽管出现了弹出窗口、覆盖层或对话框,但如何隐藏导航栏?

C# 全屏控制台?

java - 将属性放入 X500Name Builder Bouncy CaSTLe 以生成 PKCS10

android - React native Touch 事件正在通过绝对 View 传递

android - 有人可以帮助我了解 firebase on success listener 的逻辑吗

java - 配置布伦特里

three.js - three.js如何进入全屏?

java - 创建一个 Spring Boot 应用程序,但无法让 @autowired 工作

java - 使用 arraycopy 从数组中删除项目

java - 具有 Axis 服务的 JAX-WS 客户端