Пользовательский полупрозрачный Android ActionBar
Я обыскивал веб-сайты (например, документацию по 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
<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 ответов
Если вы хотите, чтобы ваша деятельность была полноэкранной, но при этом отображалась панель действий, но с альфа-каналом вы должны запросить режим наложения для панели действий в 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")) );
этот метод требует либо ссылки на рисование, либо вы также можете использовать синтаксический анализатор цвета для анализа шестнадцатеричного значения цвета (первые 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>
Шаг I. Во-первых, установите тему в styles.xml.
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Шаг II: Во-вторых, вы должны установить тему для своей деятельности в AndroidManifest.xml.
<activity android:name=".activity.YourActivity"
android:theme="@style/AppTheme.NoActionBar"/>
Шаг III: Теперь в вашем файле макета занятий установите следующее:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/agri_bg_login">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tool_bar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
</RelativeLayout>
Наконец, вы можете установить его в своей деятельности.
Toolbar tool_bar = findViewById(R.id.tool_bar);
setSupportActionbar(tool_bar);
getSupportActionbar().setTitle("Your actionbar title");
getSupportActionbar().setDisplayHomeAsUpEnabled(true);
Вот и все, вы получите результат с прозрачной панелью действий. Кроме того, здесь, если вы хотите отобразить кнопку переключения ящика и меню, он покажет их.
Я просто хотел бы поделиться с вами шагами, которые я предпринял для достижения этой цели:
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 означает, что оно полностью прозрачно.