Изготовленный На Заказ Прозрачный Верхней Панели Андроид
Я прочесывал паутины (например, документация Android, ответы здесь и т. д.) для ответа на то, что я думал, будет довольно тривиальный вопрос. Как вы достигаете полупрозрачной панели действий, как те, в Google Music и YouTube (ссылки являются примерами изображений)?
Я хочу, чтобы видеоконтент был полноэкранным и не ограничивался/не нажимался панелью действий, все еще используя преимущества встроенного компонента пользовательского интерфейса. Я, очевидно, могу использовать полностью настраиваемый вид, но я бы предпочел использовать панель действий, если это возможно.
Манифест
<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>
6 ответов:
если вы хотите, чтобы ваша активность была полноэкранной, но все еще показывала панель действий, но с Альфой вам нужно запросить overlaymode для панели действий в
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));
который может быть формой drawable с Альфой положенной внутри 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); }
Я думаю, что вы должны быть в состоянии сделать это с помощью флага окна
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(Р. макета.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>
Я просто хотел бы поделиться с вами шаги, которые я предпринял для достижения этой цели:
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 означает, что он полностью прозрачен.