【问题标题】:Programmatically make app FULL SCREEN in Android以编程方式在 Android 中使应用程序全屏显示
【发布时间】:2012-06-03 23:04:30
【问题描述】:

我知道可以通过活动清单android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 中的标记使应用程序全屏显示是否可以通过编程方式从应用程序内切换到全屏模式?

【问题讨论】:

    标签: android android-layout android-activity


    【解决方案1】:

    添加两行...

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.main);
    

    【讨论】:

    • 感谢 Samir 的快速回复,会检查一下。
    • 或许,你可以看看stackoverflow.com/questions/20005746/…,帮帮我?
    • 但是这段代码会限制滚动视图...在这段代码之后滚动视图将不起作用
    【解决方案2】:

    您可以创建新样式并添加

    <item name="android:windowFullscreen">true</item>

    或者您可以通过编程方式进行:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    

    【讨论】:

    • 这些行限制了滚动视图的滚动。
    • doc of addFlags():根据 {@link #setFlags} 设置标志位的便利功能。事实上,这只是一个电话setFlags(flags, flags);
    【解决方案3】:

    在setContentView之前的Activity onCreate中添加这个:

    @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>
    

    【讨论】:

    • 为什么还要在清单中添加它?这仍然适用于较新的设备吗?
    【解决方案4】:

    如果您需要全屏沉浸式模式(用于游戏、画廊等),这是我使用和推荐的解决方案。

    最有效的方法是仅在需要时设置 SystemUIVisibility:

    1. 在您的 onCreate() 中
    2. 在全屏模式丢失时使用 OnSystemUIChangeListener

    公共类 BaseActivity 扩展 Activity {

    @SuppressLint("InlinedApi")
    private static final int UI_OPTIONS = View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;        
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Step 1
        hideSystemUI();
    
        // Step 2
        getWindow().getDecorView()
                   .setOnSystemUiVisibilityChangeListener(new View
                   .OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                    hideSystemUI();
                }
            }
        });
    }
    
    private void hideSystemUI() {
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) actionBar.hide();
        getWindow().getDecorView().setSystemUiVisibility(UI_OPTIONS);
    }
    

    }

    【讨论】:

      【解决方案5】:

      试试这个,

      // remove title
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                           WindowManager.LayoutParams.FLAG_FULLSCREEN);
                           setContentView(R.layout.main);
      

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

      【讨论】:

        【解决方案6】:

        在 onCreate() 方法中写入

        requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-08
          • 2021-07-23
          • 2018-10-29
          • 2010-09-08
          • 2017-12-14
          • 1970-01-01
          相关资源
          最近更新 更多