Подтвердить что ты не робот

Пользовательский прозрачный Android ActionBar

Я просматривал interwebs (например, документацию на Android, ответы здесь и т.д.) для ответа на то, что, по моему мнению, было бы довольно тривиальным вопросом. Как вы достигаете полупрозрачной панели действий, например, в Google Music и YouTube (ссылки - примеры изображений)?

Я хочу, чтобы видеоконтент отображался в полноэкранном режиме, а не был заблокирован/вытолкнут панелью действий, при этом все еще используются преимущества встроенного компонента пользовательского интерфейса. Я, очевидно, могу использовать полностью настраиваемый вид, но я предпочел бы использовать 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>

Пользовательский ActionBar View

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

Ответ 1

Если вы хотите, чтобы ваша активность была в полноэкранном режиме, но все же отображалась панель действий, но с альфой вы должны запросить оверлеймод для панели действий в onCreate() вашей деятельности:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

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

Затем после вы вызываете setContentView(..) (так как 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();

Ответ 2

В дополнение к правильному ответу, если вы используете AppcomatActivity, вызовите supportRequestWindowFeature вместо

Старая версия: getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Вы хотите использовать:

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

Ответ 3

Я думаю, вы должны это сделать, используя флаг Window FEATURE_ACTION_BAR_OVERLAY.

Прежде чем вы вызовете setContentView() в своей деятельности,

Вызов:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

И он будет использовать наложенную ActionBar вместо того, чтобы нажимать на ваше окно.

Ответ 4

Вышеприведенный код абсолютно корректен для создания панели действий.

Вместо

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

использование

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

Таким образом, вы сможете полностью увидеть панель действий.

Ответ 5

Вот как я получил это для работы:

1) Запросить программный оверлей программно, вызывая

       getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

этот запрос requestFeature() должен быть запрошен из вашего действия 'onCreate()' перед вызовом 'setContentView (R.layout.my_layout)':

2) установите цвет панели действий, вызвав setBackgroundDrawable() следующим образом:

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

Этот метод требует либо ссылки на drawable, либо вы можете также использовать парсер цвета для синтаксического анализа шестнадцатеричного значения цвета (первые 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>