wake-up-neo.net

Benutzerdefinierte durchscheinende Android ActionBar

Ich habe die Interwebs durchsucht (z. B. Android Dokumentation, Antworten hier usw.)), um die Antwort auf eine meiner Meinung nach triviale Frage zu finden: Wie erzielen Sie eine durchscheinende Aktionsleiste wie z die in Google Music und YouTube (Links sind Bildbeispiele)?

Ich möchte, dass der Videoinhalt im Vollbildmodus angezeigt wird und nicht von der Aktionsleiste eingeschränkt oder nach unten gedrückt wird, ohne die Vorteile einer integrierten UI-Komponente zu beeinträchtigen. Natürlich kann ich eine vollständig benutzerdefinierte Ansicht verwenden, aber wenn möglich, nutze ich lieber die ActionBar.

Manifest

<activity
    Android:name="videoplayer"
    Android:theme="@Android:style/Theme.Holo"
    Android:launchMode="singleTop"
    Android:configChanges="keyboardHidden|orientation"/>

Aktivität

// Setup action bar
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
View customActionBarView = getLayoutInflater().inflate(R.layout.player_custom_action_bar, null);
actionBar.setCustomView(customActionBarView,
                        new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,
                                                   R.dimen.action_bar_height));
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

Menü

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:id="@+id/button1"
        Android:icon="@drawable/button1"
        Android:showAsAction="always"/>

    <item
        Android:id="@+id/button2"
        Android:icon="@drawable/button2"
        Android:showAsAction="always"/>
</menu>

Benutzerdefinierte ActionBar-Ansicht

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/custom_action_bar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    Android:gravity="center"
    Android:background="@color/TranslucentBlack">

    <!--Home icon with arrow-->
    <ImageView
        Android:id="@+id/home"
        Android:src="@drawable/home"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"/>

    <!--Another image-->
    <ImageView
        Android:id="@+id/image"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:visibility="visible"/>

    <!--Text if no image-->
    <TextView
        Android:id="@+id/text"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:gravity="center_vertical"
        Android:visibility="gone"/>

    <!--Title-->
    <TextView
        Android:id="@+id/title"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:paddingLeft="20dp"
        Android:gravity="center_vertical"/>
</LinearLayout>
52
colabug

Wenn Sie möchten, dass Ihre Aktivität im Vollbildmodus angezeigt wird, aber dennoch eine Aktionsleiste anzeigt, müssen Sie in onCreate() Ihrer Aktivität einen Overlay-Modus für die Aktionsleiste anfordern:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

//getWindow().requestFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY); << Use this for API 7+ (v7 support library) 

Dann nach rufen Sie setContentView(..) auf (da setContentView(..) neben dem Festlegen des Inhalts auch die Aktionsleiste initialisiert), können Sie einen auf Ihrer Aktionsleiste darstellbaren Hintergrund festlegen:

getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));

dies kann eine Form sein, die mit einem in res/drawable gesetzten Alpha gezeichnet werden kann:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle"> 
    <solid Android:color="#BB000000" /> 
</shape>

Sie können dies auch vollständig programmgesteuert durchführen, indem Sie ein ColorDrawable erstellen:

getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0)));

Ansonsten können Sie die Aktionsleiste natürlich komplett ausblenden. In diesem Fall können Sie in Ihrem Manifest ein benutzerdefiniertes Thema für Ihre Aktivität festlegen:

@Android:style/Theme.NoTitleBar.Fullscreen

oder programmgesteuert durch Aufrufen

getActionBar().hide();
101
MrJre

Wenn Sie AppcomatActivity verwenden, rufen Sie zusätzlich zur richtigen Antwort supportRequestWindowFeature an

Alte Version: getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Sie möchten verwenden:

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

Ich denke, Sie sollten in der Lage sein, dies mit dem Window-Flag FEATURE_ACTION_BAR_OVERLAY Zu tun.

Bevor Sie setContentView() in Ihrer Aktivität aufrufen,

Call:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Und es wird ein überlagertes ActionBar verwendet, anstatt das Fenster herunterzudrücken.

9
Calvin

Der obige Code ist für die Erstellung einer Aktionsleiste absolut korrekt.

Anstatt von

getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0)))

verwenden

getActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Auf diese Weise sehen Sie die Aktionsleiste vollständig transparent.

6
Android enthu.

So habe ich das gemacht:

1) Programmgesteuertes Anfordern eines Actionbar-Overlays durch Aufruf

       getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

dieses 'requestFeature ()' muss von Ihrer Aktivitätsmethode 'onCreate ()' angefordert werden, bevor 'setContentView (R.layout.my_layout)' aufgerufen wird:

2) Setze die Farbe der Aktionsleiste, indem du setBackgroundDrawable() wie folgt aufrufst:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00212121")) );

diese Methode erfordert entweder einen Verweis auf ein Zeichenobjekt oder Sie können auch einen Farbparser verwenden, um einen hexadezimalen Farbwert zu analysieren (die ersten beiden Ziffern werden für Alphakanäle ab # 00 bis #FF verwendet).

Beachten Sie, dass ich actionBarSherlok getSupportActionBar() verwende, dies sollte jedoch mit jeder Aktionsleiste funktionieren.

Wenn Sie dies immer noch nicht zum Laufen bringen können, fügen Sie dies zu Ihrem Designstil hinzu.

<item name="windowActionBarOverlay">true</item>
 <item name="Android:actionBarStyle">@style/ActionBar.Transparent.Example</item>
 <item name="Android:windowActionBarOverlay">true</item>
5
user2254487

Ich möchte Ihnen nur die Schritte mitteilen, die ich unternommen habe, um dies zu erreichen:

1) Bei der OnCreate Ihrer Aktivität,

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

dann

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

Dies erfolgt vor setContentView.

2) Nach setContentView können Sie Folgendes tun

 getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(0, 100, 181, 246)));

Wenn der Alphawert 0 bedeutet, ist er vollständig transparent.

0
mechdon