web-dev-qa-db-ja.com

カスタム半透明Android ActionBar

私はインターウェブを精査してきました(例Androidドキュメンテーション、ここでの回答など)。 Google Music および YouTube (リンクは画像の例です)のものですか?

ビデオコンテンツをフルスクリーンにし、組み込みのUIコンポーネントの利点を活用しながら、アクションバーによる制約/プッシュダウンを行わないようにします。もちろん、完全にカスタムビューを使用できますが、可能であればActionBarを活用します。

マニフェスト

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

アクティビティ

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

メニュー

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

カスタムアクションバービュー

<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

アクティビティをフルスクリーンにしたいがアクションバーを表示したいが、アルファを使用する場合は、アクティビティのonCreate()でアクションバーのoverlaymodeをリクエストする必要があります:

_getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

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

次に、aftersetContentView(..)を呼び出します(setContentView(..)もコンテンツの設定の横にあるアクションバーを初期化するため)、アクションバーに描画可能な背景を設定できます。

_getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));
_

res/drawableにアルファを入れた形状のドロアブルにすることができます:

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

ColorDrawableを作成して、これを完全にプログラムで行うこともできます。

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

そうでない場合はもちろん、アクションバーを完全に隠すことができます。その場合、マニフェストのアクティビティにカスタムテーマを設定できます。

_@Android:style/Theme.NoTitleBar.Fullscreen
_

または呼び出してプログラムで

_getActionBar().hide();
_
101
MrJre

正解に加えて、AppcomatActivityを使用している場合は、代わりにsupportRequestWindowFeatureを呼び出します

古いバージョン:getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

使用したい:

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

Windowフラグ_FEATURE_ACTION_BAR_OVERLAY_を使用してこれを行うことができるはずです。

アクティビティでsetContentView()を呼び出す前に、

呼び出し:

_getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
_

そして、ウィンドウを押し下げる代わりに、オーバーレイされたActionBarを使用します。

9
Calvin

上記のコードは、アクションバーを作成するために絶対に正しいです。

の代わりに

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

つかいます

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

これにより、アクションバーが完全に透明になります。

6
Android enthu.

これが私がこれをどのように動作させるかです:

1)プログラムによるアクションバーオーバーレイのリクエスト

_       getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
_

「setContentView(R.layout.my_layout)」を呼び出す前に、この「requestFeature()」をアクティビティ「onCreate()」メソッドから要求する必要があります。

2)setBackgroundDrawable()を呼び出してアクションバーの色を設定します:

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

このメソッドには、ドロアブルへの参照が必要です。または、カラーパーサーを使用して16進数のカラー値を解析することもできます(最初の2桁は、#00から#FFで始まるアルファチャネルに使用されます)

私はactionBarSherlok getSupportActionBar()を使用していますが、これはどのアクションバーでも動作するはずです。

これがまだ機能しない場合は、テーマスタイルに追加してみてください

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

私はあなたとこれを達成するために取ったステップを共有したいだけです。

1)アクティビティのOnCreateで、

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

それから

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

これは、setContentViewの前に行われます。

2)setContentViewの後、次のことができます

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

アルファ値0は、完全に透明であることを意味します。

0
mechdon