it-swarm.com.ru

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

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

Я хочу, чтобы видеоконтент отображался в полноэкранном режиме и не был ограничен/подавлен панелью действий, но при этом использовал преимущества встроенного компонента пользовательского интерфейса. Очевидно, я могу использовать полностью настраиваемое представление, но я бы лучше использовал ActionBar, если это возможно.

Manifest

<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

<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() вашей активности:

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();
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() в своей деятельности,

Call:

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

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

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

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

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

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