博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android的全屏活动?
阅读量:2292 次
发布时间:2019-05-09

本文共 15528 字,大约阅读时间需要 51 分钟。

如何全屏显示活动? 我的意思是没有通知栏。 有任何想法吗?


#1楼

AndroidManifest.xml文件中:

或使用Java代码:

protected void onCreate(Bundle savedInstanceState){    requestWindowFeature(Window.FEATURE_NO_TITLE);    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);}

#2楼

小心

requestWindowFeature(Window.FEATURE_NO_TITLE);

如果使用任何方法将操作栏设置如下:

getSupportActionBar().setHomeButtonEnabled(true);

它将导致空指针异常。


#3楼

KitKat中提供了一种称为“ 的技术。 沉浸式全屏模式演示


#4楼

如果您使用的是AppCompat和ActionBarActivity,请使用

getSupportActionBar().hide();


#5楼

如果您不想使用主题@android:style/Theme.NoTitleBar.Fullscreen因为您已经在使用自己的主题,则可以使用android:windowFullscreen

在AndroidManifest.xml中:

在styles.xml中:


#6楼

getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

#7楼

您可以通过编程方式执行此操作:

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文件来实现:

编辑:

如果您使用的是AppCompatActivity,则需要添加新主题

然后使用它。

感谢


#8楼

提示:使用getWindow()。setLayout()可能会破坏您的全屏显示! 注意此方法的文档说:

设置窗口的宽度和高度布局参数...您可以将其更改为...以使窗口不全屏的绝对值。

出于我的目的,我发现必须使用带有绝对参数的setLayout才能正确调整全屏窗口的大小。 在大多数情况下,这可以正常工作。 它由onConfigurationChanged()事件调用。 但是,出现了打ic。 如果用户退出应用程序,更改方向并重新进入,则将导致触发包含setLayout()的代码。 在此重新输入时间窗口内,将重新显示我的状态栏(被清单隐藏),但在任何其他时间,setLayout()都不会导致此情况! 解决方案是在具有硬值的那之后添加一个额外的setLayout()调用,如下所示:

public static void setSize( final int width, final int height ){//DO SOME OTHER STUFF...            instance_.getWindow().setLayout( width, height );            // Prevent status bar re-appearance            Handler delay = new Handler();            delay.postDelayed( new Runnable(){ public void run() {                instance_.getWindow().setLayout(                    WindowManager.LayoutParams.FILL_PARENT,                    WindowManager.LayoutParams.FILL_PARENT );            }}, FILL_PARENT_ON_RESIZE_DELAY_MILLIS );        }

然后正确调整窗口大小,并且无论触发该事件的事件如何,状态栏都不会重新出现。


#9楼

感谢您的回答@Cristian我遇到了错误

android.util.AndroidRuntimeException:在添加内容之前必须调用requestFeature()

我用这个解决了

@Overrideprotected void onCreate(Bundle savedInstanceState) {    requestWindowFeature(Window.FEATURE_NO_TITLE);    super.onCreate(savedInstanceState);    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);    setContentView(R.layout.activity_login);    -----    -----}

#10楼

使用来自style.xml appcompat进行尝试。 它为所有平台提供支持。


#11楼

使用Android Studio(当前版本为2.2.2)非常容易添加全屏活动。

请参阅步骤:

  1. 右键单击Java主程序包>选择“新建”>选择“活动”>然后,单击“全屏活动”。

  1. 自定义活动(“活动名称”,“布局名称”等),然后单击“完成”。

做完了!

现在,您可以轻松进行全屏活动(请参阅java类和活动布局以了解事情的工作原理)!


#12楼

它为我工作。

if (Build.VERSION.SDK_INT < 16) {        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                WindowManager.LayoutParams.FLAG_FULLSCREEN);    } else {        View decorView = getWindow().getDecorView();        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;        decorView.setSystemUiVisibility(uiOptions);    }

#13楼

显示完全沉浸式:

private void askForFullScreen()    {        getActivity().getWindow().getDecorView().setSystemUiVisibility(                View.SYSTEM_UI_FLAG_LAYOUT_STABLE                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar                        | View.SYSTEM_UI_FLAG_IMMERSIVE);    }

退出完全沉浸式模式:

private void moveOutOfFullScreen() {        getActivity().getWindow().getDecorView().setSystemUiVisibility(                View.SYSTEM_UI_FLAG_LAYOUT_STABLE                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);    }

#14楼

我想使用自己的主题,而不是使用@android:style / Theme.NoTitleBar.Fullscreen。 但这没有像这里的某些帖子所提到的那样起作用,所以我做了一些调整来弄清楚。

在AndroidManifest.xml中:

在styles.xml中:

注意:在我的情况下,必须正常使用name="windowActionBar"而不是name="android:windowActionBar" 。 因此,我只是使用了两者来确保以后需要移植到新的Android版本。


#15楼

protected void onCreate(Bundle savedInstanceState) {    requestWindowFeature(Window.FEATURE_NO_TITLE);    super.onCreate(savedInstanceState);    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);    setContentView(R.layout.activity_splash_screen);    getSupportActionBar().hide();}

#16楼

首先,您必须使用“ NoActionBar”设置应用主题,如下所示

然后将这些行添加到全屏活动中。

public class MainActiviy extends AppCompatActivity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                                  WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.main);    }}

它会在全屏活动中隐藏操作栏/工具栏和状态栏


#17楼

经过很多时间没有成功,我提出了自己的解决方案,该解决方案与其他开发人员的退出类似。 所以如果有人需要她,我的问题是调用后系统导航栏没有隐藏。 同样,在我的情况下,我需要景观,以防万一注释该行以及所有内容。 首先创造风格

这是我的清单文件

这是我的活动

public class Splash extends Activity {/** Duration of wait **/private final int SPLASH_DISPLAY_LENGTH = 2000;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle icicle) {    super.onCreate(icicle);    setContentView(R.layout.splash_creen);    /* New Handler to start the Menu-Activity     * and close this Splash-Screen after some seconds.*/    new Handler().postDelayed(new Runnable(){        @Override        public void run() {            /* Create an Intent that will start the Menu-Activity. */            Intent mainIntent = new Intent(Splash.this,MainActivity.class);            Splash.this.startActivity(mainIntent);            Splash.this.finish();        }    }, SPLASH_DISPLAY_LENGTH);}

}

这是我主要的全屏活动。 onSystemUiVisibilityChange thi方法非常重要,否则调用后的android主导航栏将保留并且不再消失。 确实令人讨厌的问题,但是此功能解决了该问题。

公共类MainActivity扩展了AppCompatActivity {

private View mContentView;@Overridepublic void onResume(){    super.onResume();    mContentView.setSystemUiVisibility(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);}@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.fullscreen2);    ActionBar actionBar = getSupportActionBar();    if (actionBar != null)    {        actionBar.hide();    }    mContentView = findViewById(R.id.fullscreen_content_text);    mContentView.setSystemUiVisibility(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);    View decorView = getWindow().getDecorView();    decorView.setOnSystemUiVisibilityChangeListener            (new View.OnSystemUiVisibilityChangeListener()            {                @Override                public void onSystemUiVisibilityChange(int visibility)                {                    System.out.println("print");                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)                    {                        mContentView.setSystemUiVisibility(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);                    }                    else                    {                        mContentView.setSystemUiVisibility(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);                        }                }            });}

}

这是我的初始屏幕布局:

This is my fullscreen layout

我希望这能帮到您


#18楼

活动内容:

@Overridepublic void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);    if (hasFocus) {        decorView.setSystemUiVisibility(                View.SYSTEM_UI_FLAG_LAYOUT_STABLE                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                | View.SYSTEM_UI_FLAG_FULLSCREEN                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);    }}

AndroidManifests:


#19楼

对于那些使用AppCompact ... style.xml的用户

然后把名字放在清单中...


#20楼

@Overridepublic void onConfigurationChanged(Configuration newConfig) {    super.onConfigurationChanged(newConfig);    adjustFullScreen(newConfig);}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {    super.onWindowFocusChanged(hasFocus);    if (hasFocus) {        adjustFullScreen(getResources().getConfiguration());    }}private void adjustFullScreen(Configuration config) {    final View decorView = getWindow().getDecorView();    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {        decorView.setSystemUiVisibility(                View.SYSTEM_UI_FLAG_LAYOUT_STABLE                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                        | View.SYSTEM_UI_FLAG_FULLSCREEN                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);    } else {        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);    }}

#21楼

内部styles.xml ...

这对我有用。 希望对您有帮助。


#22楼

这是示例代码。 您可以打开/关闭标志来隐藏/显示特定部分。

public static void hideSystemUI(Activity activity) {    View decorView = activity.getWindow().getDecorView();    decorView.setSystemUiVisibility(            View.SYSTEM_UI_FLAG_LAYOUT_STABLE                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                    //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar                    | View.SYSTEM_UI_FLAG_IMMERSIVE);}

然后,您重置为默认状态:

public static void showSystemUI(Activity activity) {    View decorView = activity.getWindow().getDecorView();    decorView.setSystemUiVisibility(            View.SYSTEM_UI_FLAG_LAYOUT_STABLE                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}

您可以从onCreate调用上述函数:

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.course_activity);    UiUtils.hideSystemUI(this);}

#23楼

使用Kotlin,这就是我的方法:

class LoginActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_login)        window.decorView.systemUiVisibility =                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or                View.SYSTEM_UI_FLAG_FULLSCREEN    }}

沉浸模式

身临其境的模式适用于用户将与屏幕进行大量交互的应用。 例如游戏,查看画廊中的图像或阅读分页内容,例如书中的幻灯片或演示文稿中的幻灯片。 为此,只需添加以下行:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION orView.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

粘性沉浸式

在常规沉浸式模式下,每当用户从边缘滑动时,系统都会负责显示系统栏-您的应用甚至不会意识到手势的发生。 因此,如果用户实际上可能需要作为主要应用程序体验的一部分从屏幕边缘滑动(例如,在玩需要大量滑动的游戏或使用绘图应用程序时),则应启用“粘性”沉浸式模式。

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

有关更多信息:

如果您使用键盘,有时会在键盘显示时显示StatusBar。 在那种情况下,我通常将此添加到我的样式xml中

styles.xml

这行到我的清单


#24楼

AndroidManifest.xml

I.您的主要应用主题为Theme.AppCompat.Light.DarkActionBar

用于隐藏ActionBar / StatusBar

style.xml

隐藏系统导航栏

public class MainActivity extends AppCompatActivity {    protected void onCreate(Bundle savedInstanceState) {        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);        setContentView(R.layout.activity_main)        ...    } }

二。 您的主要应用程序主题是Theme.AppCompat.Light.NoActionBar

用于隐藏ActionBar / StatusBar

style.xml

隐藏系统导航栏

类似于 Theme.AppCompat.Light.DarkActionBar


#25楼

只需将此代码粘贴到onCreate()方法中

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

#26楼

创建一个空的活动,并在onCreate添加两行。

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // full screen activity        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);        getSupportActionBar().hide();        setContentView(R.layout.activity_main);    }    ...}

#27楼

在onCreate()中的setContentView之后使用此方法,并通过getWindow()传递Window对象。

public void makeActivityFullScreen(Window window){    View decorView = window.getDecorView();    //        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {       window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;    }    decorView.setSystemUiVisibility(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    );}

此代码也可用于陷波屏。 要全屏检查陷波,您需要使用android P,但是如果您有陷波显示电话,请转到设置->显示设置->应用程序显示比例--->选择您的应用程序 --->这里有两个安全的选项是显示和全屏模式,请选择全屏模式并运行应用程序,即使没有android Pie ,也可以在全屏模式下查看全屏模式


#28楼

科特琳

遵循google doc,有一种简单的方法:

override fun onWindowFocusChanged(hasFocus: Boolean) {super.onWindowFocusChanged(hasFocus)if (hasFocus) hideSystemUI() }private fun hideSystemUI() {// Enables regular immersive mode.// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKYwindow.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE        // Set the content to appear under the system bars so that the        // content doesn't resize when the system bars hide and show.        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN        // Hide the nav bar and status bar        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION        or View.SYSTEM_UI_FLAG_FULLSCREEN)      }// Shows the system bars by removing all the flags// except for the ones that make the content appear under the system bars.private fun showSystemUI() {window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)       }

转载地址:http://sodnb.baihongyu.com/

你可能感兴趣的文章
JAVA 对象访问: 句柄和指针
查看>>
dubbo 报错:java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException
查看>>
logback的使用和logback.xml详解
查看>>
Linux 快捷键
查看>>
JPA 联合主键配置
查看>>
ObjectAlreadyExistsException:Unable to store Job : '*', because one already exists with thi s ident
查看>>
这些大厂面试真题你能答出来,年薪至少30-50W,想不想挑战一下?
查看>>
携程T7用637页PDF,解读十余热门技术领域,八场携程技术沙龙干货
查看>>
开发框架SpringBoot:构建SpringBoot工程+配置文件详解+Actuator
查看>>
6年拉力工作经验,学了阿里P8级架构师的7+1+1落地项目,跳槽阿里年薪直接40W+
查看>>
90天吃透阿里P8推荐的625页Java编程兵书技术实战,直接入职阿里定级P6
查看>>
清华毕业扫地僧,用157集终于把java给讲完了,总计3.13GB
查看>>
清华毕业大佬用了一个项目就把SpringMVC+Spring+MyBatis给讲完了
查看>>
终于学完阿里P8架构师多年实战经验总结分享微服务之道实战文档
查看>>
年薪120W的架构师简历你见过吗?java程序员该如何达到?
查看>>
超赞!80W美团架构师7年心血终成轻量级框架SSM整合开发实战文档
查看>>
超赞!终于学完了阿里P8架构师7年心血整理总结的微服务实战文档
查看>>
真666!阿里资深架构师熬夜纯手写的238页微服务容器化开发实战笔记
查看>>
终于学完了2021年阿里内部480道全套java面试题及答案
查看>>
面试官:熟悉Redis吗,项目中你是如何对Redis内存进行优化的
查看>>