我一直在搜索互联网(例如Android文档,这里的答案等),以获得我认为是一个相当微不足道的问题的答案。如何实现像Google Music和YouTube中的半透明操作栏(链接是图像示例)?
我希望视频内容能够全屏显示,而不是通过操作栏进行约束/推送,同时仍然利用内置UI组件的优势。我显然可以使用完全自定义的视图,但如果可能的话,我宁愿利用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>
自定义操作栏视图
<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 :(得分:101)
如果您希望自己的活动是全屏但仍然显示操作栏,但使用Alpha,则必须为活动的onCreate()
中的操作栏请求overlaymode:
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));
可以是一个可绘制的形状,其中alpha放入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();
答案 1 :(得分: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);
}
答案 2 :(得分:9)
我认为您应该可以使用Window标志FEATURE_ACTION_BAR_OVERLAY
来完成此操作。
在您的活动中致电setContentView()
之前,
拨打:强>
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
它会使用重叠的ActionBar
而不是按下你的窗口。
答案 3 :(得分:6)
以上代码对于制作操作栏绝对正确。
而不是
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0)))
使用
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
通过这种方式,您可以看到操作栏完全透明。
答案 4 :(得分:5)
以下是我的工作方式:
1)通过调用
以编程方式请求操作栏覆盖 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
在调用'setContentView(R.layout.my_layout)'之前,必须从您的活动'onCreate()'方法请求'requestFeature()':
2)通过调用setBackgroundDrawable()
来设置操作栏颜色,如下所示:
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00212121")) );
此方法需要引用drawable,或者您也可以使用颜色解析器来解析十六进制颜色值(前两个数字用于从#00到#FF的alpha通道)
请注意,我使用的是actionBarSherlok getSupportActionBar()
,但这适用于任何操作栏。
如果您仍然无法使用此功能,请尝试将其添加到您的主题样式
<item name="windowActionBarOverlay">true</item>
<item name="android:actionBarStyle">@style/ActionBar.Transparent.Example</item>
<item name="android:windowActionBarOverlay">true</item>
答案 5 :(得分:0)
我只想与您分享我为实现这一目标而采取的步骤:
1)在活动的OnCreate上,
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)));
alpha值0表示它是完全透明的。
答案 6 :(得分:0)
第一步: 首先,将主题设置为styles.xml
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
第二步: 其次,您必须在AndroidManifest.xml上为您的活动设置主题
<activity android:name=".activity.YourActivity"
android:theme="@style/AppTheme.NoActionBar"/>
第三步: 现在,在您的活动布局文件中设置如下:
<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);
仅此而已,您将获得透明的操作栏的结果。另外,在这里如果要显示抽屉切换按钮和菜单,则会显示它们。