Motyw Pełny ekran dla AppCompat


304

Chciałbym wiedzieć, w jaki sposób mogę zastosować motyw pełnoekranowy (bez paska tytułu + paska akcji) do działania. Korzystam z biblioteki AppCompat z pakietu wsparcia v7.

Próbowałem zastosować się android:theme="@android:style/Theme.NoTitleBar.Fullscreen"do mojej konkretnej działalności, ale się zawiesiła. Myślę, że to dlatego, że mój motyw aplikacji jest taki.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Też tego próbowałem

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

który ukrywa tylko pasek tytułu, ale nie pasek akcji. Moje obecne obejście polega na tym, że ukrywanie paska akcji

getSupportActionBar().hide();

Odpowiedzi:


836

Gdy używasz Theme.AppCompat w swojej aplikacji, możesz użyć FullScreenTheme, dodając poniższy kod do stylów.

<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>

a także wspomnieć w pliku manifestu.

<activity
   android:name=".activities.FullViewActivity"
   android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" 
/>

67
Stylem nadrzędnym powinien być „Theme.AppCompat.Light.NoActionBar”
Hover Ruan

3
Właściwie wystarczy dodać to do pliku xml stylu: <item name = "android: windowFullscreen"> true </item>. Widoczność paska akcji (paska tytułu) można osobno kontrolować za pomocą metod .hide / .show w czasie wykonywania.
Amin

2
FEATURE_NO_TITLE nie był honorowany. Nie znam różnicy, ale w końcu zmieniłem moją Aktywność, aby rozszerzyć Aktywność zamiast AppCompatActivity i mój ten sam kod działał (na szczęście nie potrzebuję AppCompat): this.requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATIONIDE | View.SYSTEM_UVIGIIDE
user888867,

ukrywa to również pasek stanu :(
Omama,

3
Dodam hideNavigation()w onResume()- bez tego, pasek nawigacyjny był nadal widoczny w mojej aplikacji (API 18+)
Antek

69

Na podstawie odpowiedzi @nebyan odkryłem, że pasek akcji nadal się nie ukrywa.

Poniższy kod działa dla mnie:

<style name="AppFullScreenTheme" parent="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>

i oczywiście nie zapomniałem edytować AndroidManifestpliku.

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@ newbyan dlaczego twoje rozwiązanie nie działa, a to działa dla mnie? Jaki jest powód?
Ahmet

1
nie trzeba ustawiać, <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>jeśli Twój motyw zawiera.NoActionBar
user924

19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

Używając powyższego pliku xml w pliku style.xml, będziesz mógł ukryć tytuł oraz pasek akcji.


12

Problemy pojawiają się przed i po wersjach Androida 4.0 (API poziom 14).

z tu tworzę własne rozwiązania.

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

Piszę ten kod w metodzie onResume (), ponieważ jeśli wyjdziesz z aplikacji, a następnie otworzysz ją ponownie, pasek akcji pozostanie aktywny! (i to rozwiązuje problem)

Mam nadzieję, że było to pomocne;)


Zauważ, że jeśli użytkownik ręcznie pociągnie pasek stanu, sam się nie ukryje. Co gorsza, jeśli wyświetlana jest miękka klawiatura, pasek stanu również pokazuje się automatycznie i ponownie nie będzie się pokazywał.
Hendra Anggrian


7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}

5

Możesz wykonać poniższy krok: -

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

Mam nadzieję, że to pomoże .. Dzięki !!


4

Powinien być nadrzędny = "@ style / Theme.AppCompat.Light.NoActionBar"

<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>

Tylko to rozwiązanie faktycznie ukrywa pasek tytułu i sprawia, że ​​jest on całkowicie pełny. Powinien być oznaczony jako prawidłowe rozwiązanie. Dzięki!
Darko Maksimovic

3

Aby ukryć zarówno pasek stanu, jak i pasek akcji i ustawić aktywność na pełnym ekranie, użyj następującego kodu w swojej aktywności onResume()lub onWindowFocusChanged()metodzie:

@Override
protected void onResume() {
    super.onResume();
    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);
}

Więcej informacji można znaleźć w następujących linkach:

Uwaga: Korzystając z rozwiązań xml zawartych w tym wątku, mogłem tylko ukryć pasek stanu, ale nie pasek nawigacji.


1
Dziękuję, to jedyny ukrywanie paska nawigacji! Bardzo polecam tę odpowiedź.
Maharkus


2

Ten motyw działa tylko po API 21 (w zestawie). I ustaw przezroczystość zarówno paska stanu, jak i paska nawigacji.

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>

1

Aby usunąć pasek tytułu w AppCompat:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }

1

Możesz spróbować :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>

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


1
Wyjaśnij także kod, jeśli go podasz, pomoże to zrozumieć kod i może pomóc w uzyskaniu wiedzy na temat przyszłych problemów.
Lepidopteron

0

tylko to ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>

0

Po prostu u tych facetów do Twojego stylu:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.