android - Как скрыть панель действий до создания активности, а затем снова показать ее?




android-3.0-honeycomb android-actionbar (21)

Работает решение @Clerics. Но, похоже, это также проблема с некоторыми приложениями для игры в googles: googles, play store, talk. Также другие большие приложения, такие как skype.

EDIT : Решение Bellow дало мне проблему для actionbarsherlock на api <4.0, причина, по которой setTheme не работает, предварительно сэндвич с мороженым

Добавьте в свой манифест следующие теги приложения или активности:

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

И затем в вашей основной деятельности:

    // Set theme
    setTheme(R.style.YOUR_THEME);
    getSupportActionBar().setTitle(R.string.title);

    // Start regular onCreate()
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

Мне нужно реализовать заставку в моем сотовом приложении. Я использую этот код в onCreate активности, чтобы показать всплеск:

setContentView(R.layout.splash);
getActionBar().hide();

и этот код, чтобы показать основной интерфейс после некоторого времени:

setContentView(R.layout.main);
getActionBar().show();

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

Как я могу сделать панель действия невидимой?

Я попытался применить тему к действию без панели действий:

<item name="android:windowActionBar">false</item>

но в этом случае getActionBar () всегда возвращает null, и я не нашел способа показать его снова.


вы можете использовать это:

getSupportActionBar().hide(); если он не работает, попробуйте это:

getActionBar().hide();

если выше не работает, попробуйте вот так:

в вашем каталоге = res / values ​​/ style.xml, откройте style.xml -> есть parent изменение атрибута parent="Theme.AppCompat.Light.DarkActionBar"

если все это не работает. Я больше не знаю. но для меня это работает.


У меня все еще была ошибка с нулевым указателем, и, наконец, это помогло, когда я вызвал первый getWindow (). RequestFeature (), а затем super.onCreate ()

public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
getActionBar().show();

Я также пытался скрыть Action Bar на Android 2.2, но ни одно из этих решений не работало. Все заканчивается катастрофой. Я проверил DDMS LOg, Он говорил мне использовать «Theme.AppCompat». В последний раз я решил проблему, изменив android:theme="@android:style/Theme.Holo.Light.NoActionBar" Line

в android:theme="@style/Theme.AppCompat.NoActionBar" и это сработало, но интерфейс был темным.

то я попробовал android:theme="@style/Theme.AppCompat.Light.NoActionBar" и, наконец, получил то, что хотел.

После этого, когда я узнал о «AppCompat» на сайте разработчика, я получил это.

Поэтому я считаю, что решение для Android 2.2

<activity
    android:name=".MainActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

И извините за мой плохой английский, как всегда.


это может быть удобно
добавьте это в свой манифест

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

ура


Если вы используете ActionBarSherlock, используйте тему Theme.Sherlock.NoActionBar в своей деятельности

<activity 
    android:name=".SplashScreenActivity"
    android:theme="@style/Theme.Sherlock.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Если у вас есть нуль, потому что вы используете библиотеку поддержки , вместо getActionBar() вам нужно вызвать getSupportActionBar() .


Лучший способ, который я нахожу после прочтения всех доступных опций, - установить основную тему без ActionBar, а затем настроить MyTheme в коде родителем всей Activity.

Manifest:

<application
...
        android:theme="@android:style/Theme.Holo.Light.NoActionBar"
...>

BaseActivity:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.GreenHoloTheme);
}

Этот способ помогает мне избежать ActionBar при запуске приложения!


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

getSupportActionBar().hide();

2015, используя библиотеку поддержки v7 с темой AppCompat, задайте эту тему для своей деятельности.

<style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/md_indigo_100</item>
    <item name="colorPrimary">@color/md_indigo_500</item>
    <item name="colorAccent">@color/md_red_500</item>
    <item name="android:textColorPrimary">@color/md_white_1000</item>
    <item name="android:textColor">@color/md_purple_500</item>
    <item name="android:textStyle">bold</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

Для Splashscreen вы должны использовать эту строку в manifest и не использовать getActionBar()

<item name="android:windowActionBar">false</item>

и один раз, когда Activity Splash завершена в основном использовании Activity ниже или ничего

<item name="android:windowActionBar">true</item>

Поместите ваш всплеск в отдельное действие и используйте startActivityForResult из startActivityForResult вашего основного действия, чтобы отобразить его. Это работает, потому что, согласно документам:

В качестве специального случая, если вы вызываете startActivityForResult () с requestCode> = 0 во время первоначального onCreate (Bundle savedInstanceState) / onResume () вашей активности, то ваше окно не будет отображаться до тех пор, пока результат не будет возвращен из начатой ​​активности , Это делается для того, чтобы избежать видимого мерцания при перенаправлении на другую активность.

Вероятно, вы должны сделать это только в том случае, если аргумент onCreate равен null (что указывает на новый запуск вашей активности, а не перезапуск из-за изменения конфигурации).


Лучший способ сделать это - сделать первый вид активности как пустой активности и содержимого, которое вы хотите поместить, а затем через некоторое время запустить другое действие. Следуя этому пути, вы можете сделать первое действие в качестве своего заставки без панели действий или чего-либо еще. Heres моя первая деятельность

package com.superoriginal.rootashadnasim.syllabus;

import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class first_screen extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_screen);


    final Handler h=new Handler();
    h.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent=new     Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
            startActivity(intent);
        }
    },2000);

}
}

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

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

Решения, уже опубликованные, появились с помощью sideffect, что первый вызов .show () не анимировал ActionBar для меня. У меня есть еще одно приятное решение, в котором исправлено:

Создайте прозрачный drawable - что-то вроде этого:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
       android:color="#00000000" />
</shape>

Установите фактический фон панели действий в невидимое пользовательское представление, которое вы установили на панели действий:

getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout);
      getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
              ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);

Установите прозрачный фон для панели действий в onCreate:

getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent));

Imortant: не скрывать панель действий сразу в onCreate, но с небольшой задержкой позже - например, когда макет закончен с созданием:

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    getSupportActionBar().hide();
                }
            });

Перед тем, как ваш первый вызов .show () установит видимый пользовательский вид:

_actionbarRoot.setVisibility(View.VISIBLE);
getSupportActionBar().show();

лучший и простой

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


Создайте два стиля:

<style name="AppThemeNoBar" parent="Theme.AppCompat.Light">
     <item name="android:windowNoTitle">true</item>
</style>

<style name="AppThemeBar" parent="Theme.AppCompat.Light">
    <item name="android:windowNoTitle">false</item>
</style>

Установите AppThemeNoBar в качестве темы приложения и AppThemeBar в действие, в котором вы хотите показать ActionBar. Используя два стиля, вы не увидите панель действий во время загрузки представлений.

Проверьте эту ссылку Android: скрыть панель действий при просмотре нагрузки


Просто добавьте это в свои styles.xml

<item name="android:windowNoTitle">true</item>

Попробуйте это, это работает для меня:

Ниже удаляется строка заголовка деятельности.

 requestWindowFeature(Window.FEATURE_NO_TITLE);

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

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

(Полный пример ниже) Обратите внимание: эти методы были вызваны до того, как мы установили представление контента нашей деятельности

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

        // Sets Application to full screen by removing action bar
        requestWindowFeature(Window.FEATURE_NO_TITLE);    
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main); 

        // without this check, we would create a new fragment at each orientation change!
        if (null == savedInstanceState)
            createFragment();
    }

Студия Android предоставляет встроенный шаблон для полного экрана, если вы используете Android-студию, вы можете следовать ниже, чтобы реализовать полноэкранную активность.

Готово. Студия Android выполнила свою работу, теперь вы можете проверить код на весь экран.


Я понимаю, что ссылки для ссылок - это не лучший способ сделать что-то, но я настоятельно рекомендую вам прочитать следующую документацию от Google. Это официальный документ android doc о том, как управлять вашей системой ui (например, панель действий, панель навигации и т. Д.). К сожалению, информация слишком много, чтобы публиковать сообщения напрямую, но после прочтения этого вы точно поймете, как показывать и скрывать функции независимо от того, для какой версии вы разрабатываете, так просто!

Покоряйте ссылку, когда-либо меняющуюся, ее можно найти в официальной документации по Android для обучения -> начало работы -> Лучшие практики для пользовательского интерфейса -> Управление системой ui

https://developer.android.com/training/system-ui/index.html


Возможно, вам придется определить канал уведомлений для вашего приложения. Проверьте журнал, там должно быть предупреждение. Проверьте this для введения

Я приведу вам пример, это будет в котине. Во-первых, сделайте такой класс. Вам нужно будет вызвать createMainNotificationChannel () один раз в начале вашего приложения.

class NotificationManager(private val context: Context) {

    companion object {
        private val CHANNEL_ID = "YOUR_CHANNEL_ID"
        private val CHANNEL_NAME = "Your human readable notification channel name"
        private val CHANNEL_DESCRIPTION = "description"
    }

    @RequiresApi(Build.VERSION_CODES.O)
    fun getMainNotificationId(): String {
        return CHANNEL_ID
    }

    @RequiresApi(Build.VERSION_CODES.O)
    fun createMainNotificationChannel() {
            val id = CHANNEL_ID
            val name = CHANNEL_NAME
            val description = CHANNEL_DESCRIPTION
            val importance = android.app.NotificationManager.IMPORTANCE_LOW
            val mChannel = NotificationChannel(id, name, importance)
            mChannel.description = description
            mChannel.enableLights(true)
            mChannel.lightColor = Color.RED
            mChannel.enableVibration(true)
            val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
            mNotificationManager.createNotificationChannel(mChannel)
    }
}

Тогда вы можете использовать утилиту, как это

fun createNotificationCompatBuilder(context: Context): NotificationCompat.Builder {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        return NotificationCompat.Builder(context, NotificationManager(context).mainNotificationId)
    } else {
        return NotificationCompat.Builder(context)
    }
}






android android-3.0-honeycomb android-actionbar