Android中的全屏活动?

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

你可以通过编程来实现:

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"/> 

编辑:

如果你使用的是AppCompatActivity,那么你需要如下设置主题

 <activity android:name=".ActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.AppCompat.Light.NoActionBar"/> 

KitKat中有一种称为Immersive Full-Screen Mode的技术。 我认为现在是实现全屏活动的首选方式。 沉浸式全屏模式演示

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

在AndroidManifest.xml中:

 <activity android:name=".ui.activity.MyActivity" android:theme="@style/MyTheme"> </activity> 

在styles.xml中:

 <style name="MyTheme" parent="your parent theme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style> 

AndroidManifest.xml文件中:

 <activity android:name=".Launch" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <!-- This line is important --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

或者在Java代码中:

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

要小心

 requestWindowFeature(Window.FEATURE_NO_TITLE); 

如果您使用任何方法设置操作栏,如下所示:

 getSupportActionBar().setHomeButtonEnabled(true); 

这将导致空指针exception。

如果你使用AppCompat和ActionBarActivity,那么使用这个

getSupportActionBar().hide();

style.xml appcompat试试这个。 它可以支持所有平台。

 <!-- Application theme. --> <style name="AppTheme.FullScreen" parent="AppTheme"> <item name="android:windowFullscreen">true</item> </style> <!-- Application theme. --> <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" /> 

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

请参阅以下步骤:

  1. 右键单击你的Java主包>select“新build”>select“活动”>然后,点击“全屏活动”。

步骤1

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

第二步

完成!

现在,您可以轻松完成全屏活动(请参阅Java类和活动布局以了解事物的工作原理)!

感谢您的答复@Cristian我得到错误

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

我解决了这个使用

 @Override 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_login); ----- ----- } 

首先你必须用下面的“NoActionBar”来设置你的应用主题

 <!-- Application theme. --> <style name="AppTheme" parent="@style/Theme.AppCompat.Light.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); } } 

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

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

在AndroidManifest.xml中:

 <activity android:name=".ui.activity.MyActivity" android:theme="@style/MyTheme"> </activity> 

在styles.xml中:

 <style name="MyTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:windowFullscreen">true</item> </style> 

注意:在我的情况下,我必须使用name="windowActionBar"而不是name="android:windowActionBar"才能正常工作。 所以我只是用它来确保我需要在以后移植到新的Android版本。

提示:使用getWindow()。setLayout()可以搞砸你的全屏显示! 注意这个方法的文档说:

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

http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29

对于我的目的,我发现我必须使用绝对参数的setLayout正确调整我的全屏窗口。 大多数时候,这工作得很好。 它被onConfigurationChanged()事件调用。 然而,有一个呃逆。 如果用户退出应用程序,改变方向,并重新进入,这将导致我的代码,其中包括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 ); } 

窗口然后正确地重新resize,并且不pipe触发这个事件的事件状态栏都不会重新出现。

对于那些使用AppCompact … style.xml的人

  <style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> 

然后把名字放在清单中

显示完全沉浸:

 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); } 
  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(); } 

经过很多时间没有成功,我来到了我自己的解决scheme,与其他开发人员类似的退出。 所以如果有人需要她是我的问题是,系统导航栏没有隐藏后调用。 另外在我的情况下,我需要风景,所以以防万一注释,行和所有。 首先创build风格

  <style name="FullscreenTheme" parent="AppTheme"> <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowBackground">@null</item> <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item> <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item> </style> 

这是我的清单文件

 <activity android:name=".Splash" android:screenOrientation="landscape" android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize" android:label="@string/app_name" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize" android:screenOrientation="landscape" android:label="@string/app_name" android:theme="@style/FullscreenTheme"> </activity> 

这是我的spalsh活动

 public class Splash extends Activity { /** Duration of wait **/ private final int SPLASH_DISPLAY_LENGTH = 2000; /** Called when the activity is first created. */ @Override public 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方法退出重要,否则android主导航栏在调用后将停留,不再消失。 确实令人烦恼的问题,但是这个function解决了这个问题。

公共类MainActivity扩展AppCompatActivity {

 private View mContentView; @Override public 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); } @Override protected 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); } } }); } 

}

这是我的闪屏布局:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="@android:color/white" android:src="@drawable/splash" android:layout_gravity="center"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, splash"/> </LinearLayout> This is my fullscreen layout <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0099cc" > <TextView android:id="@+id/fullscreen_content_text" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:keepScreenOn="true" android:text="@string/dummy_content2" android:textColor="#33b5e5" android:textSize="50sp" android:textStyle="bold" /> </FrameLayout> 

我希望这会帮助你

https://developer.android.com/training/system-ui/immersive.html

活动:

 @Override public 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:

  <activity android:name=".LoginActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/title_activity_login" android:theme="@style/FullscreenTheme" ></activity> 

它为我工作。

 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); } 
 getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);