Как скрыть строку состояния в Android


104

Я сослался на эту ссылку . В этом случае, если пользователь нажимает EditText (например, To :), в это время клавиатура выскакивает, и в то же время пользователь может прокручивать, чтобы увидеть все оставшиеся представления (например: составить, тема, кнопка отправки) в этот экран. Точно так же в моем приложении у меня есть одно действие - у меня есть несколько виджетов или представлений. Предположим, что если пользователь щелкает Edittext, который находится в моем Activity, тогда появляется клавиатура, и я могу прокручивать, чтобы увидеть оставшиеся представления. Но если я укажу этот атрибут android:theme="@android:style/Theme.NoTitleBar.Fullscreen"в манифесте, мне не удалось прокрутить, чтобы увидеть оставшиеся представления, но если дать атрибутandroid:theme="@android:style/Theme.NoTitleBar"как это в манифесте, я могу прокрутить, чтобы увидеть оставшееся представление, но на этом экране есть строка состояния, здесь я хочу полный экран, и даже если клавиатура выскочила, я могу прокрутить, чтобы увидеть оставшиеся представления ..? какие изменения я должен сделать для этого ..?


3
@ user448250: Обратите внимание, что вы не можете скрыть строку состояния в Android 3.0, и есть большая вероятность, что вы не сможете скрыть строку состояния в будущем. В Android 3.0 в строке состояния находятся кнопки BACK и HOME, поэтому строка состояния должна быть всегда доступна.
CommonsWare

Мне только что удалось скрыть и заголовок, и строку состояния в эмуляторе с помощью 3.0, уровень API 11.
erdomester

Полноэкранный режим должен быть разрешен, пользователь обычно не хочет видеть строку состояния во время полноэкранной игры.
GMsoF 05

@ user448250 Вы когда-нибудь узнали об этом?
Tiago

Что вообще такое активность? Это какой-то xml-файл в папке вашего сайта?
Небулярная пыль

Ответы:


173

Напишите это в своей деятельности

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

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

Проверьте документ здесь: https://developer.android.com/training/system-ui/status.html

и ваше приложение перейдет в полноэкранный режим. нет строки состояния, нет строки заголовка. :)


29
Обратите внимание, что это не сработает, если ваш суперкласс активности вызывает setContentView в методе onCreate - приложение завершит работу с исключением.
Бен Клейтон

1
@Ron Я тестировал на уровне API 8. Возможно, на других уровнях поведение отличается?
Бен Клейтон

Это действительно для всех версий от 2.3.x до 4.x?
Костадин

1
Это по-прежнему предотвращает прокрутку экрана при отображении программной клавиатуры.
Tiago

3
Используйте его раньше, super.onCreate(savedInstanceState);если он упадет
Дэвид,

19
 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);
      ActionBar actionBar = getActionBar();
      actionBar.hide();
 }

3
Я заметил, что когда я использую этот метод, отображение программной клавиатуры перемещает представления над editText вместо изменения размера. Как это исправить?
разработчик Android,

19

Используйте тему "Theme.NoTitleBar.Fullscreen"и попробуйте настроить "android:windowSoftInputMode=adjustResize"действие в. AndroidManifest.xml.Подробности можно найти здесь .


При использовании описанного выше подхода моя строка состояния может быть скрыта, когда приложение работает в полноэкранном режиме, однако я все еще могу видеть строку состояния, пока прокручиваю страницу вниз. Есть ли способ, если мне вообще не нужна строка состояния?
Хейзел Ван,

15

Используйте этот код, чтобы скрыть строку состояния в вашем приложении и упростить использование

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

12

Если вам это нужно в одном действии, вы должны добавить onCreate перед setContentView:

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

setContentView(R.layout.your_screen);

1
Таким образом, клавиатура закрывает поле ввода в веб-просмотре.
Аллен Ворк

@AllenVork какое-нибудь решение?
Ишаан Кумар

12

Добавьте это в свой класс Activity

@Override
protected 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.activity_main);
    // some your code
}

8

Используйте это для своего Activity.

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

6
void hideStatusBar() {
        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);
        }
    }

Вы можете использовать этот метод, чтобы скрыть строку состояния. И это также важно, чтобы скрыть панель действий. В этом случае вы можете использовать getSupportActionBar (). Hide (), если вы расширили активность из библиотеки поддержки, такой как Appcompat, или вы можете просто вызвать getActionBar (). Hide () после метода, упомянутого выше. Спасибо


6

Измените тему приложения в manifest.xmlфайле.

android:theme="@android:style/Theme.Translucent.NoTitleBar"

Как ни странно, это показывает оранжевую полосу вверху экрана. Однако панель уведомлений скрыта.
Датский Ашфак

6

Если вы скрываете строку состояния, сделайте это в onCreate (для Activity) и onCreateView / onViewCreated (для Fragment)

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

И не забудьте снять флажок при выходе из действия, иначе после посещения этого действия у вас будет полный экран во всем приложении. Чтобы очистить, сделайте это в своем onDestroy (для Activity) или onDestroyView (для Fragment)

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

5

Используйте этот код:

requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.youractivityxmlname);

4

Этот код скрывает строку состояния.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

чтобы скрыть панель действий, напишите эту строку: -

requestWindowFeature(Window.FEATURE_NO_TITLE);

обе строки могут быть написаны вместе, чтобы скрыть панель действий и строку состояния. все эти строки должны быть написаны до setContentViewвызова onCreateметода в методе.


Красиво работает. Спасибо!
Джошуа Пинтер

3

В AndroidManifest.xml -> внутри действия, которое вы хотите использовать, добавьте следующее:

android:theme="@style/Theme.AppCompat.Light.NoActionBar"
//this is for hiding action bar

а в MainActivity.java -> внутри метода onCreate () добавьте следующее:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//this is for hiding status bar

3

Вы можете скрыть, используя styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="HiddenTitleTheme" parent="AppTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

просто назовите это в своем манифесте вот так android:theme="@style/HiddenTitleTheme"


3

Вы можете скрыть строку состояния, установив для нее прозрачный цвет с помощью xml . Добавьте элемент statusBarColor в свою тему активности:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

пожалуйста, добавьте код объяснения, только ответы немного сбивают с толку других
Рам Гадиярам

2
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setTheme(R.style.Theme_AppCompat_Light_NoActionBar);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    , WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity__splash_screen);
}

Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста , измените свой ответ , чтобы добавить объяснения и дать указание о том , что применять ограничения и допущения.
Дхарман

Я не имел большого представления о том, что такое AppCompat, просто использовал его. И эти три строчки сделали свою работу.
user3156040

Жалко, что собственная документация Google, как всегда, неверна, как этого добиться. Может, им стоит скопировать и вставить этот код.
zeeshan


0

Мы не можем предотвратить отображение статуса в полноэкранном режиме на устройствах Kitkat (4.4+) и выше, поэтому попробуйте взломать, чтобы заблокировать расширение строки состояния.

Решение довольно большое, поэтому вот ссылка на SO:

StackOverflow: скрыть строку состояния в android 4.4+ или kitkat в полноэкранном режиме


Я думаю, что вы ошибаетесь, пожалуйста, взгляните на официальную информацию о скрытии строки состояния developer.android.com/training/system-ui/status.html
Хосе Рикардо Читерио Алькала

Хосе, я проверю информацию по данной ссылке и при необходимости обновлю ответ. Этот вопрос / ответ добавлен год назад, когда не было официального решения для этого сценария. Возможно, в следующем выпуске или в версиях Google / Android добавят API / метод для того же. Если они предоставили решение, то это восторг. Спасибо!
Jyo the Whiff

0

Это решение работает для меня :)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= 19) {
           getWindow().setFlags(AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT, AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT);
           getWindow().getDecorView().setSystemUiVisibility(3328);
    }else{
           requestWindowFeature(Window.FEATURE_NO_TITLE);
           this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    DataBindingUtil.setContentView(this, R.layout.activity_hse_video_details);

0
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // If the Android version is lower than Jellybean, use this call to hide
    // the status bar.
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } else {
       View decorView = getWindow().getDecorView();
       // Hide the status bar.
       int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
       decorView.setSystemUiVisibility(uiOptions);
       // Remember that you should never show the action bar if the
       // status bar is hidden, so hide that too if necessary.
       ActionBar actionBar = getActionBar();
       actionBar.hide();
    }

    setContentView(R.layout.activity_main);

}
...
}

0

Используется в Manifest

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"

Наверное, зависит от темы. В моем случае произошло исключение: «java.lang.IllegalStateException: вам нужно использовать тему Theme.AppCompat (или ее потомок) с этим действием».
CoolMind

0

В разделе res -> values ​​-> styles.xml

Внутри тега style body paste

<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>

0

Если вы обратитесь к Документам Google, вы можете использовать этот метод для Android 4.1 и выше, вызовите этот метод перед setContentView ()

public void hideStatusBar() {
    View view = getWindow().getDecorView();
    int uiOption = View.SYSTEM_UI_FLAG_FULLSCREEN;
    view.setSystemUiVisibility(uiOption);
    ActionBar actionBar = getActionBar();
    if (actionBar != null) {
        actionBar.hide();
    }
}

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

Здравствуйте! Попробуйте добавить несколько комментариев или словесных объяснений того, что вы делаете.
Джордж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.