Android:制作全屏应用程序
Posted
技术标签:
【中文标题】Android:制作全屏应用程序【英文标题】:Android: making a fullscreen application 【发布时间】:2014-12-20 00:24:35 【问题描述】:我可以对由最新版本的 android Studio 创建的新空白 Activity 进行哪些最简单的更改,以使应用全屏显示?
我想创建一个全屏 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 ComponentInfocom.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) 的旧三星 SGH-T499Y 上进行测试
【问题讨论】:
应用崩溃时会出现什么错误?在 Android Studio 中检查 LogCat 输出(崩溃错误总是以 FATAL 开头并显示为红色)。 您是否使用了自定义主题(可能是某些属性)中的任何内容,而这些内容在全屏默认主题中不可用?如果您在审阅屏幕上选择该主题,您的视图是否会呈现(我使用的是 Eclipse,所以不知道 Android Studio 中的等价物是什么)。您的日志应该告诉您发生了什么以及确切的错误是什么,但对我来说,这通常是更改活动主题时的问题。 当你使用主题 Holo.Light.NoActionBar 时你打电话给getActionBar()
吗?它返回 null,如果你是 setTitle("")
或类似的东西,它将是 NullPointerException
。
@kha 该视图在 Android Studio 的预览屏幕中呈现。但是,当我在与我的真实设备对应的模拟器上预览时,我收到以下警告:渲染问题无法解析文件 /Applications/Third Party/Android/Android Studio.app/sdk/platforms/android-21/data/res /color/secondary_text_holo_dark.xml 您遇到此问题是因为您尝试应用 android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
的活动正在扩展 ActionBarActivity,这需要应用 AppCompat 主题。
从Activity
而不是ActionBarActivity
扩展您的活动
您可能需要相应地更改您的 Java 类。
如果您也想删除状态栏,请在 setContentView(layout)
之前在 onCreateView
方法中使用它
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
【讨论】:
您必须从 ActionBarActivity 扩展您的活动类,将其更改为 Activity。 ActionBarActivity 无法切换到全屏。 首先我在进行此更改后出现错误,但后来我意识到它还需要我将 import android.support.v7.app.ActionBarActivity 替换为 import android.app.Activity,现在我看不到操作栏,但状态栏仍然存在,因此应用还没有完全全屏。 谢谢 Rohit5k2。你的编辑版本给了我我希望的结果。 但是这段代码只隐藏了状态栏。有什么方法也可以隐藏系统导航栏。【参考方案2】:只需将以下属性添加到您当前的主题:
<item name="android:windowFullscreen">true</item>
例如:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/orange</item>
<item name="colorPrimaryDark">@android:color/holo_orange_dark</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
【讨论】:
【参考方案3】:只需在您的活动标签中的清单文件中执行此操作
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
【讨论】:
【参考方案4】:在我的情况下一切正常。在 logcat 中查看。也许 logcat 显示一些可以帮助您解决问题的东西
无论如何你都可以尝试以编程方式进行:
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);
【讨论】:
【参考方案5】:更新答案我添加了android:windowIsTranslucent
,以防您在活动开始时出现白屏
只需在 values/styles.xml
中创建新样式<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- to hide white screen in start of window -->
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>
从您的 AndroidManifest.xml 为您的活动添加样式
android:theme="@style/AppTheme"
变成这样
<activity android:name=".Splash"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【讨论】:
【参考方案6】:只需在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>
镇静丸:)
【讨论】:
【参考方案7】:在onCreate
通话中
requestWindowFeature(Window.FEATURE_NO_TITLE); // for hiding title
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
【讨论】:
【参考方案8】:您可以使用以下代码在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);
【讨论】:
【参考方案9】:根据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);
【讨论】:
【参考方案10】:如果您签出当前的 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
【讨论】:
【参考方案11】:我最近遇到了完全相同的问题,并且也从以下帖子中受益(除了上面 Rohit5k2 的解决方案):
https://bsgconsultancy.wordpress.com/2015/09/13/convert-any-website-into-android-application-by-using-android-studio/
在第 3 步中,MainActivity
扩展 Activity
而不是 ActionBarActivity
(如 Rohit5k2 所述)。将NoTitleBar
和Fullscreen
主题元素放入AndroidManifest.xml
文件中的正确位置也非常重要(请看第4 步)。
【讨论】:
【参考方案12】:将这些添加到应用程序的 Activity 中。
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
)
【讨论】:
欢迎来到 Stack Overflow。一点上下文和解释将大大改善这个答案。在使用现有答案添加旧问题的答案时,重要的是要指出您的答案所针对的问题的哪些新方面,并注意所涉及的技术在被问到问题后是否发生了变化,这是否与您的答案相关。跨度> 【参考方案13】:您可以将App in FullScreen Mode制作成一行代码。我在我的代码中使用它。
只需在 style.xml 中设置 AppTheme -> Theme.AppCompat.Light.NoActionBar
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
它适用于所有页面..
【讨论】:
【参考方案14】:不推荐为“FLAG_FULLSCREEN”添加当前工作解决方案
在themes.xml 中将以下内容添加到您的主题中
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
非常适合我。
【讨论】:
【参考方案15】:fun Activity.showSystemUi()
this.window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)
【讨论】:
此问题有 14 个现有答案,其中包括一个获得最高票数且获得超过 8 票 的答案。你确定你的解决方案还没有给出吗?如果不是,您为什么认为您的方法改进了已被社区验证的现有提案?在 Stack Overflow 上,提供解释总是很有用,但在问题已得到解决且让 OP 和社区都满意的情况下,它尤其很重要。通过解释您的答案有何不同以及何时可能更受欢迎,帮助读者了解答案。以上是关于Android:制作全屏应用程序的主要内容,如果未能解决你的问题,请参考以下文章