Stworzyłem prostą aplikację demonstracyjną z ekranem powitalnym, mapą i kilkoma zwykłymi ekranami.
U góry mam pasek akcji zawierający logo. Wszystko wygląda dobrze na moim telefonie (Galaxy s1 I9000 V2.3), ale kiedy testuję go na Galaxy s2 v4, pasek akcji pojawia się również na ekranie powitalnym i na ekranie mapy.
Spalsh i aktywność mapy nawet nie dziedziczą po ActionBarActivity, więc jak to możliwe i jak mogę to usunąć?
Oczywisty:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:theme="@style/Theme.AppCompat.Light" >
<activity
android:name=".HomeActivity"
android:icon="@drawable/android_logo"
android:label=""
android:logo="@drawable/android_logo" >
<!--
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
-->
</activity>
<activity
android:name=".MapActivity"
android:label="" >
</activity>
<activity
android:name=".PackageActivity"
android:icon="@drawable/android_logo"
android:label=""
android:logo="@drawable/android_logo" >
</activity>
<activity
android:name=".SplashActivity"
android:label="" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Definicja MapActivity (jest długa, więc dołączyłem tylko definicję):
public class MapActivity extends FragmentActivity implements LocationListener
Aktywność powitalna:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
public class SplashActivity extends Activity{
private static final long SPLASH_DISPLAY_LENGTH = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent mainIntent = new Intent(SplashActivity.this,HomeActivity.class);
SplashActivity.this.startActivity(mainIntent);
SplashActivity.this.finish();
}
}, SPLASH_DISPLAY_LENGTH);
}
}
java
android
android-actionbar
Tomer
źródło
źródło
getActionBar
ponieważ aktywność nie dziedziczy zActionBarActivity
<item name="android:windowActionBar">false</item>
to nie ukryje tego na wszystkich ekranach?Ponieważ pytasz o to, jak się ukryć w określonej czynności , potrzebujesz tego:
źródło
1. Przejdź do swojego
manifest.xml
pliku.2. dla którego chcesz ukryć swój ActionBar a następnie ,
Find
activity tag
add
<activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.NoActionBar" >
źródło
Jeśli chcesz uzyskać pełny ekran bez actionBar i Title.
Dodaj go w style.xml
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style>
i użyj stylu w działaniu manifest.xml.
<activity .... android:theme="@style/AppTheme.NoActionBar" > ...... </activity>
źródło
ActionBar
Zwykle występuje razemFragments
więc zActivity
można go ukryći od tego
Fragment
możesz to zrobićźródło
getSupportActionBar().hide();
w ActionBarActivityJeśli używasz Theme.AppCompat.Light, lepszym odpowiednikiem byłby Theme.AppCompat.Light.NoActionBar.
Zauważyłem, że użycie Theme.AppCompat.NoTitleBar spowodowało, że tekst mojego przycisku był niewidoczny, więc używam Theme.AppCompat.Light.NoActionBar.
<activity android:name=".Activity" android:label="@string/app_name" android:theme="@android:style/Theme.AppCompat.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
źródło
To działa dla mnie! Umieść to w swojej Aktywności w manifestach
<activity // ... android:theme="@style/Theme.AppCompat.Light.NoActionBar" // ... </activity>
Możesz również utworzyć własny motyw w styles.xml w następujący sposób:
<style name="Theme.MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name = "android:windowActionBar">false</item> <item name = "android:windowNoTitle">true</item> // more custom... </style>
Mam nadzieję, że to pomoże.
źródło
Możesz użyć trybu Low Profile. Patrz tutaj
Po prostu wyszukaj
SYSTEM_UI_FLAG_LOW_PROFILE
to również przyciemnia przyciski nawigacyjne, jeśli są obecne na ekranie.źródło
Powyższe odpowiedzi pomogłyby z działaniem ActionBar. Aby to dodać, użyj następującego kodu w przypadku korzystania z ekranu powitalnego: Użyj tego przed ustawieniem widoku zawartości:
Aby wyjaśnić, oto jak to zrobić:
super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main);
Spowoduje to wyświetlenie pełnego ekranu, tj. Usunięcie górnego paska, na którym widać pasek sieci itp
źródło
Zastosuj następujące elementy w swoim motywie działania w AndroidManifest.xml:
<activity android:name=".DashboardActivity" android:theme="@style/AppFullScreenTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Następnie zastosuj poniższe w swoim Style w style.xml
<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>
źródło
// Ukryj ActionBar na górze
// Dodaj ten kod do pliku java
źródło
Działa to w API 27
W pliku styles.xml zamień kod na następujący ....
<resources> <!-- No Action Bar --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
Następnie w plikach (np. Activity_list.xml), w których chcesz mieć pasek narzędzi, umieść poniższy kod.
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:background="@color/colorPrimary"/>
Jeśli masz problemy, przełącz się na układ liniowy (bo na tym jest testowany ten kod)
źródło
Od tutaj :
Jedną z opcji jest więc całkowite wyłączenie ActionBar (w pliku manifest.xml aplikacji), a następnie dodanie Toolbar na każdej stronie, która wymaga ActionBar.
(skorzystaj z powyższego linku, aby uzyskać wyjaśnienie krok po kroku)
źródło
Zastąp plik AndroidManifest.xml
android:theme="@style/FullscreenTheme"
do
android:theme="@style/Theme.Design.NoActionBar"
źródło
Dodaj nowy styl do swojego style.xml
<!-- 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="LoginTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
a następnie dodaj następujący wiersz w swoim manifeście
<activity android:name=".Login" android:label="@string/app_name" android:theme="@style/LoginTheme" >
źródło
Sprawdź atrybut dopełnienia, jeśli problem nadal występuje po zmianie motywu.
Problem z wypełnieniem tworzący biały znak na górze okna fragmentu / okna aplikacji
Po usunięciu dopełnienia - górna wartość automatycznie usuwana jest spacja.
źródło