Пользовательский прозрачный 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> 

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

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

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

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

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

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

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

Вызов:

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

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

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

Вместо

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

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

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

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

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

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> 
Intereting Posts
Отображать текст уведомления в строке состояния – Android AlertDialog с двумя редакторами – при нажатии кнопки ok -> запуск нового предупреждения Проверка базы данных android sql из Eclipse FTP и SFTP в Android Android 4.4: Низкая энергия Bluetooth; Подключить без сканирования для устройства BLE ConnectivityManager.requestNetwork в Android 6.0 Можно ли установить максимальное время, разрешенное для записи андроида, с использованием намерения? Android Support Package / Compatibility Library – используйте v4 или v13? Проект регистрации в Android / регистрации Как проверить, находится ли пользователь в круге Google maps v2 Как поместить горизонтальную линию делителя между редактированием текста в действии TabLayout.setTabTextColors () не работает при попытке изменить цвет текста Легкая стрелка Android – активность просочилась IntentReceiver Как добавить дополнительный элемент в список без обновления предыдущего элемента