Использование полноэкранной активности

Я делаю простую игру и до сих пор использовал пустую активность. Теперь я хочу, чтобы он покрывал весь экран. Нужно ли мне перекодировать все это с помощью полноэкранного действия? Я пытался найти что-то в Интернете, но все, что я находил, добавляло этот бит:​

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

Что приводит к сбою приложения, как только оно запускается на устройстве. ТАК пожалуйста, если кто-нибудь может показать мне мою ошибку.

Вот ссылка на вывод logcat, а также код игры

Logcat и код игры


person nabeel    schedule 11.10.2015    source источник
comment
Покажите нам свой Logcat, и мы покажем вам ошибку.   -  person Udi Idan    schedule 11.10.2015
comment
Добавьте его к своему вопросу.   -  person Udi Idan    schedule 12.10.2015
comment
Уже сделал, но так как Logcat был слишком длинным, я загрузил ссылку на файл с помощью google docs.   -  person nabeel    schedule 13.10.2015


Ответы (6)


Попробуйте это, чтобы установить активность в полноэкранном режиме:

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
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

Вы можете поместить этот код в метод onCreate()

person Michele Lacorte    schedule 11.10.2015
comment
По сути, сначала это не сработало, так как я установил целевой SDK до Froyo. Как только я изменил это на KitKat, это сработало как шарм - person nabeel; 17.10.2015
comment
@Michele Lacorte Я вижу полосу белого цвета, когда мой навигационный ящик отключается в Android L? - person Ishant Sagar; 10.10.2016
comment
Я думаю, что решение @t-kashima xml ниже в ответах довольно хорошее. Проверьте это. Нет необходимости везде дублировать этот принятый код ответов, если у вас есть стиль, определяющий полноэкранный режим. - person Arnold Balliu; 16.02.2017
comment
Пробовал это. Действие становится полноэкранным только после onCreate, но строка состояния появляется, когда действие возобновляется. XML-решение работает лучше. - person RominaV; 24.03.2017

Вы можете попробовать следующий код.

стиль.xml:

<style name="AppTheme.NoTitle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

AndroidManifest.xml:

<activity
    android:name=".FullScreenActivity"
    android:theme="@style/AppTheme.NoTitle"
    android:screenOrientation="portrait"
    android:launchMode="singleTop">
</activity>
person t-kashima    schedule 12.10.2015
comment
лучшее решение, я думаю, здесь. Должно быть больше голосов. - person hcknl; 13.01.2017
comment
Проголосовал, но это не работает. Протестировал его, и он показывает программные кнопки при возобновлении активности. - person RominaV; 24.03.2017

Ни один из приведенных выше ответов не работает правильно; у них проблемы с методом onResume(), и в итоге они показывают программные клавиши.

Правильный способ сделать это довольно просто. Переопределите этот метод в Activity, который должен быть полноэкранным:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        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
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

Это если вы хотите "Липкое погружение". Ознакомьтесь с полным документом здесь и решите, что лучше для вашего случай использования.

person RominaV    schedule 24.03.2017
comment
Благодарю вас! Это должен быть принятый ответ. У меня было это в onResume(), как предполагают многие ответы на переполнение стека, и это работало в 99% случаев, что затрудняло отладку. Вы избавили меня от необходимости запускать этот код каждые несколько секунд в качестве обходного пути. - person a_cardboard_box; 22.02.2018
comment
@user1516661 user1516661 Сначала я был сбит с толку тем, что все говорили также поместить его в метод onResume() :) - person RominaV; 25.02.2018

То, что вы хотели, называется иммерсивным режимом, который работает на Android 4.4 и выше.

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
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

Официальную документацию можно найти здесь

person Amalan Dhananjayan    schedule 01.06.2016

В файле 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, а не AppCompatActivity...

person KAMAL VERMA    schedule 09.08.2016

Вы можете просто перейти к файлу манифеста и добавить android:theme="@android:style/Theme.NoTitleBar.Fullscreen" к тегу <activity /> или <application /> в файле манифеста в зависимости от ваших требований.

person tk1505    schedule 11.10.2015