【问题标题】:How I can set keep screen on and full screen flag?如何设置保持屏幕开启和全屏标志?
【发布时间】:2012-05-03 04:40:29
【问题描述】:

在我的应用中全屏显示,我编写了这段代码:

  public void onCreate(Bundle savedInstanceState) {
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
           getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
               super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
                       .
                       .
                       .

并在我的应用程序中保持屏幕打开,我在布局中编写此代码:

android:keepScreenOn="true" 

虽然并不总是这样,但有时会像这样错误我:

java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:381)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:226)
at android.view.Window$LocalWindowManager.removeView(Window.java:432)
at android.app.Dialog.dismissDialog(Dialog.java:278)
at android.app.Dialog.access$000(Dialog.java:71)
at android.app.Dialog$1.run(Dialog.java:111)
at android.app.Dialog.dismiss(Dialog.java:268)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)

我能做什么?我写的是真实的代码? 谢谢...

【问题讨论】:

    标签: android layoutparams android-screen android-windowmanager


    【解决方案1】:
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.main);
    

    必须先调用super.onCreate....

    您可以通过编程方式完成:

    public class ActivityName extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // remove title
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.main);
        }
    }
    

    或者你可以通过你的 AndroidManifest.xml 文件来做:

    <activity android:name=".ActivityName"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    </activity>
    

    【讨论】:

    • 尝试让我们知道结果
    • 我不知道 screenOnflag 我使用上面的代码制作全屏但没有使用任何标志
    • 好吧,它是真正的全屏。我想知道我的屏幕总是打开的其他事情。
    【解决方案2】:

    在 AndroidMenifest.xml 文件中添加活动

     android:name=".ActivityName"
            android:configChanges="orientation|keyboardHidden"
            android:keepScreenOn="true"
            android:label="@string/app_name"
            android:theme="@style/customTheme" >
    

    如果在 setContentView 之前存在,则删除以下内容

    boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    

    【讨论】:

      【解决方案3】:

      启用全屏:

      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
      

      启用屏幕:

      getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
                              WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
      

      【讨论】:

        【解决方案4】:

        WindowManager.LayoutParams.FLAG_FULLSCREEN API 折旧 >= 30 (R) 建议使用此方法检查。

        @Suppress("DEPRECATION")
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
           window.insetsController?.hide(WindowInsets.Type.statusBars())
        } else {
           window.setFlags(
              WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN
             )
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-09
          • 1970-01-01
          • 1970-01-01
          • 2013-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多