我可以对最新版本的Android Studio创建的新空白活动进行哪些最简单的更改,以使应用程序全屏显示?
我想创建一个全屏Android应用程序。我正在使用Android Studio。 This post建议我添加一行,例如......
android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"
...到AndroidManifest.xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lexogram.james.blackslate" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.lexogram.james.blackslate.MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
当我这样做时,应用程序会编译,但在启动时会崩溃。如果我删除该行,该应用程序运行正常,但使用操作栏和标题栏,其他用户也会注意到。
这是我第一次尝试创建Android应用,因此我的应用很难从最初的Hello World示例中更改。
编辑: 我创建了一个新项目,并对此进行了一次更改。以下是错误日志的摘录:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lexogram.james.test/com.lexogram.james.test.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)...
注意:我正在使用运行Android 2.2(Froyo)的旧版Samsung SGH-T499Y进行测试
答案 0 :(得分:73)
您遇到此问题是因为您尝试应用android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
的活动正在扩展ActionBarActivity,这需要应用AppCompat主题。
将您的活动从Activity
延伸,而不是从ActionBarActivity
您可能需要相应地更改Java类。
如果您想删除状态栏,请在setContentView(layout)
方法{/ 1>}中的onCreateView
之前使用此功能
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
答案 1 :(得分:22)
只需将以下属性添加到当前主题:
#tcp settings
net.core.somaxconn
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_tw_reuse
net.ipv4.ip_local_port_range
#nginx configs
proxy_set_header Connection "";
proxy_http_version 1.1;
例如:
<item name="android:windowFullscreen">true</item>
答案 2 :(得分:16)
只需在活动代码
中的清单文件中执行此操作android:theme="@style/Theme.AppCompat.Light.NoActionBar"
答案 3 :(得分:9)
无论如何,您可以尝试以编程方式执行此操作:
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);
}
}
答案 4 :(得分:4)
只需在styles.xml中声明
<style name="AppTheme.Fullscreen" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
然后在menifest.xml中使用
<activity
android:name=".activities.Splash"
android:theme="@style/AppTheme.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
凉丸:)
答案 5 :(得分:3)
onCreate
来电
requestWindowFeature(Window.FEATURE_NO_TITLE); // for hiding title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
答案 6 :(得分:3)
根据this document,将以下代码添加到onCreate
getWindow().getDecorView().setSystemUiVisibility(SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION |
SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
答案 7 :(得分:2)
您可以使用以下代码在android中显示整页
步骤1:在styles.xml部分中创建主题
<style name="AppTheme.Fullscreen" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
第2步:在AndroidManifest.xml中添加主题
<activity
android:name=“.Activity”
android:theme="@style/AppTheme.Fullscreen"/>
第3步:Java代码部分
例如,您可以将以下代码添加到onCreate()方法中。
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
答案 8 :(得分:2)
如果您签出当前的Android Studio。您可以使用全屏模板创建新活动。如果创建这样的活动。您可以查看Android Studio在全屏模式和普通模式之间切换所使用的基本代码。
这是我在其中找到的代码。通过一些小的调整,我相信您会得到所需的东西。
public class FullscreenActivity extends AppCompatActivity {
private static final boolean AUTO_HIDE = true;
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
private static final int UI_ANIMATION_DELAY = 300;
private final Handler mHideHandler = new Handler();
private View mContentView;
private final Runnable mHidePart2Runnable = new Runnable() {
@SuppressLint("InlinedApi")
@Override
public void run() {
// Delayed removal of status and navigation bar
// Note that some of these constants are new as of API 16 (Jelly Bean)
// and API 19 (KitKat). It is safe to use them, as they are inlined
// at compile-time and do nothing on earlier devices.
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);
}
};
private View mControlsView;
private final Runnable mShowPart2Runnable = new Runnable() {
@Override
public void run() {
// Delayed display of UI elements
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.show();
}
mControlsView.setVisibility(View.VISIBLE);
}
};
private boolean mVisible;
private final Runnable mHideRunnable = new Runnable() {
@Override
public void run() {
hide();
}
};
private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (AUTO_HIDE) {
delayedHide(AUTO_HIDE_DELAY_MILLIS);
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
mVisible = true;
mControlsView = findViewById(R.id.fullscreen_content_controls);
mContentView = findViewById(R.id.fullscreen_content);
// Set up the user interaction to manually show or hide the system UI.
mContentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggle();
}
});
// Upon interacting with UI controls, delay any scheduled hide()
// operations to prevent the jarring behavior of controls going away
// while interacting with the UI.
findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Trigger the initial hide() shortly after the activity has been
// created, to briefly hint to the user that UI controls
// are available.
delayedHide(100);
}
private void toggle() {
if (mVisible) {
hide();
} else {
show();
}
}
private void hide() {
// Hide UI first
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.hide();
}
mControlsView.setVisibility(View.GONE);
mVisible = false;
// Schedule a runnable to remove the status and navigation bar after a delay
mHideHandler.removeCallbacks(mShowPart2Runnable);
mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
}
@SuppressLint("InlinedApi")
private void show() {
// Show the system bar
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
mVisible = true;
// Schedule a runnable to display UI elements after a delay
mHideHandler.removeCallbacks(mHidePart2Runnable);
mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
}
private void delayedHide(int delayMillis) {
mHideHandler.removeCallbacks(mHideRunnable);
mHideHandler.postDelayed(mHideRunnable, delayMillis);
}
}
现在,我进一步检查了如何以更简单的方式完成此操作。
在您的 styles.xml 文件中更改AppTheme
样式将是最有帮助的。
这会将您的所有活动更改为全屏视图。
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
如果只希望某些活动显示为“全屏”,则可以创建一个新的AppTheme,以扩展当前的应用程序主题,并以您创建的新样式包含上述代码。这样,您只需在要进行全屏显示的任何活动的清单中设置style=yournewapptheme
答案 9 :(得分:0)
我最近遇到了完全相同的问题,也受益于以下帖子(除了上面的Rohit5k2&#39;解决方案):
在第3步中,MainActivity
扩展Activity
而不是ActionBarActivity
(如Rohit5k2所述)。将NoTitleBar
和Fullscreen
主题元素放入AndroidManifest.xml
文件中的正确位置也非常重要(请参阅步骤4)。
答案 10 :(得分:0)
将这些添加到应用程序的活动中。
Android JAVA
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN)
;
Android Kotlin
supportActionBar?.hide()
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
答案 11 :(得分:0)
您可以只用一行代码制作处于全屏模式的应用。我正在我的代码中使用它。
只需在style.xml中设置AppTheme-> Theme.AppCompat.Light.NoActionBar
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
它将适用于所有页面。
答案 12 :(得分:0)
不建议为“ FLAG_FULLSCREEN”添加当前的工作解决方案
将以下内容添加到themes.xml中的主题
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
为我完美地工作。