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)很容易添加全屏活动。
请参阅以下步骤:
- 右键单击你的Java主包>select“新build”>select“活动”>然后,点击“全屏活动”。
- 自定义活动(“活动名称”,“布局名称”等),然后单击“完成”。
完成!
现在,您可以轻松完成全屏活动(请参阅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);