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

104

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

user448250
источник
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);
}
user3156040
источник
Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста , измените свой ответ , чтобы добавить объяснения и дать указание о том , что применять ограничения и допущения.
Дхарман
Я не имел большого представления о том, что такое 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);

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