50

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

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

Ответил здесь: http://stackoverflow.com/questions/16939814/android-util-androidruntimeexception-requestfeature-must-be-called-before-add – user3167086

ответ

100

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

, который может быть форма вытяжки с альфа положить в разрешении/вытяжке:

<?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(); 
+0

Спасибо! Я подумал, что это было что-то простое, что мне не хватало. – colabug

+0

Знаете ли вы, как настроить высоту панели действий? Мое измерение, похоже, не имеет эффекта! 'actionBar.setCustomView (customActionBarView, новый ActionBar.LayoutParams (ActionBar.LayoutParams.MATCH_PARENT, R.dimen.action_bar_height));' – colabug

+0

im не уверен, что вы можете реально изменить высоту панели действий, я бы предположил, что нет, но если это возможно, я рекомендую против него, поскольку он является окончательным компонентом пользовательского интерфейса в сотах. – MrJre

9

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

Перед тем, как позвонить setContentView() в своей деятельности,

Вызов:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

И будет использовать обложил ActionBar вместо толкая вниз окно.

4

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

1) Запрос ActionBar накладкой программным путем вызова

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

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

2) установить ActionBar цвета по телефону 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

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

Вместо

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

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

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

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

12

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

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

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

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

Наконец-то!Спасибо man :) – Analizer

+0

Спасибо! Это сработало для меня. –