Fullscreen при смене одного Activity на другое Activity

175
29 декабря 2018, 01:10

Пытаюсь сделать приложение на полный экран (для всех активити). Создал абстрактный FullscreenActivity и наследую от него остальные активити.

public abstract class FullscreenActivity extends AppCompatActivity {
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            hideSystemUI();
        }
    }
    private void hideSystemUI() {
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | 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);
    }
    private void showSystemUI() {
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
}

Возникли следующие проблемы:

  1. При смене активити ненадолго появляется и скрывается ActionBar и NavigationBar (мелькает);
  2. При загрузке приложения мгновение виден ActionBar и NavigationBar (мелькает).

Как это поправить? И вообще правильный ли я способ выбрал с наследованием класса?

Пытаюсь реализовать через тему в манифесте

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

Но тут не выходит скрыть NavigationBar

Answer 1

Вы можете сделать абстрактный класс таким, должно помочь:

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);
    }
}

Или вы можете сделать это через свой AndroidManifest.xml файл:

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

Если вы используете AppCompatActivity, вам нужно задать тему, как показано ниже.

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

Оригинал: https://stackoverflow.com/a/2868052

READ ALSO
После сборки проекта maven пропадает папка resources

После сборки проекта maven пропадает папка resources

До сборки проекта путь к ресурсам такой "src/main/resources/", после сборки этот путь уже не работает, тк в файле jar ресурсы находятся в самом начале

151
Реформат FTP ссылок

Реформат FTP ссылок

Возникла проблема переделать FTP-ссылки к файлу на более "юзер-френдли" вид

177
Метод в Java как метод str() / int() / bool () в Python

Метод в Java как метод str() / int() / bool () в Python

В общем я выучил Python, в нем можно просто написать

157