actionbar(如何让android的actionbar浮动且透明)
本文目录
如何让android的actionbar浮动且透明
如上图所示,谷歌地图的actionbar是透明的,且浮动在整个布局之上,没有占用布局空间。其实要做到这样的效果,我们首先想到的是两个方面:1.将让actionbar浮动起来。2.给actionbar一个背景,可以为颜色也可以为图片。下面我以背景色为颜色举个例子。getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);ActionBar actionBar = getActionBar();actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(“#330000ff“)));google的actionbar是分为上下两栏显示的,上面的代码只能设置顶部actionbar的背景色,为了让下面的背景色一致,还需要添加一行代码:actionBar.setSplitBackgroundDrawable(newColorDrawable(Color.parseColor(“#330000ff“)));如果我们不想在代码中设置actionbar背景,而是在style中修改xml,可以自定义actionbar,然后设置下面三个属性:《style name=“MyActionBar“ parent=“@android:style/Widget.Holo.ActionBar“》 《item name=“android:background“》@drawable/ab_stacked_solid_inverse_holo《/item》 《item name=“android:backgroundStacked“》#346c36《/item》 《item name=“android:backgroundSplit“》@drawable/ab_stacked_solid_inverse_holo《/item》 《/style》其中的background和setBackgroundDrawable对应,backgroundSplit和setSplitBackgroundDrawable对应,而backgroundStacked代表的是actionbar选项卡的背景色。但是actionbar的背景如果设置为纯色,或者为不透明的图片,那么上面的方法无法使actionbar达到透明的效果。注意上面的代码中,我们的颜色值并不是纯色的而是有一定的透明度。#330000ff的前两位代表透明度。
actionbar是什么
action bar基本释义操作杆The Notes action bar is also still available just above the Inbox area. Notes操作栏也仍然可以使用,就在Inbox区域上方。Overpower dims on the action bar when the player is affected by disarm spells. 被缴械以后压制图标变灰。
自定义的actionbar怎么实现透明度渐变
public class FadingActionBarHelper { private static final String TAG = “FadingActionBarHelper“; private int mAlpha = 255; private Drawable mDrawable; private boolean isAlphaLocked; private final ActionBar mActionBar; public FadingActionBarHelper(final ActionBar actionBar) { mActionBar = actionBar; } public FadingActionBarHelper(final ActionBar actionBar, final Drawable drawable) { mActionBar = actionBar; setActionBarBackgroundDrawable(drawable); } public void setActionBarBackgroundDrawable(Drawable drawable) { setActionBarBackgroundDrawable(drawable, true); } @TargetApi(Build.VERSION_CODES.KITKAT) public void setActionBarBackgroundDrawable(Drawable drawable, boolean mutate) { mDrawable = mutate ? drawable.mutate() : drawable; mActionBar.setBackgroundDrawable(mDrawable); if (mAlpha == 255) { if (Build.VERSION.SDK_INT 》= Build.VERSION_CODES.KITKAT) mAlpha = mDrawable.getAlpha(); } else { setActionBarAlpha(mAlpha); } } /** * An {@link android.app.ActionBar} background drawable. * * @see #setActionBarBackgroundDrawable(android.graphics.drawable.Drawable) * @see #setActionBarAlpha(int) */ public Drawable getActionBarBackgroundDrawable() { return mDrawable; } /** * Please use this method for global changes only! * This is helpful when you need to provide something like * Navigation drawer: lock ActionBar and set * {@link android.graphics.drawable.Drawable#setAlpha(int)} * to {@link #getActionBarBackgroundDrawable()} directly. * * @param alpha a value from 0 to 255 * @see #getActionBarBackgroundDrawable() * @see #getActionBarAlpha() */ public void setActionBarAlpha(int alpha) { if (mDrawable == null) { Log.w(TAG, “Set action bar background before setting the alpha level!“); return; } if (!isAlphaLocked) { mDrawable.setAlpha(alpha); View view = mActionBar.getCustomView(); if(view!=null){ //这里是对自定义actionbar背景的处理,我这边就草草了事了 if(alpha》=55){ view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.search); view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.refresh); }else{ view.findViewById(R.id.search_button).setBackgroundResource(R.drawable.skin_nav_icon_l_search_rev); view.findViewById(R.id.refresh_button).setBackgroundResource(R.drawable.skin_nav_icon_r_refresh_rev); } Log.i(TAG, “search_button.alpha=》“+alpha); } } mAlpha = alpha; } public int getActionBarAlpha() { return mAlpha; } /** * When ActionBar’s alpha is locked {@link #setActionBarAlpha(int)} * won’t change drawable\’s alpha (but will change {@link #getActionBarAlpha()} level) * * @param lock */ public void setActionBarAlphaLocked(boolean lock) { // Update alpha level on unlock if (isAlphaLocked != (isAlphaLocked = lock) && !isAlphaLocked) { setActionBarAlpha(mAlpha); } } public boolean isActionBarAlphaLocked() { return isAlphaLocked; } } 2.其他的组件类我这不copy了,有兴趣的朋友自行下载github上的项目吧o(∩_∩)o。 view plainpublic class NotifyingScrollView extends ScrollView { // Edge-effects don’t mix well with the translucent action bar in Android 2.X private boolean mDisableEdgeEffects = true; /** * @author Cyril Mottier */ public interface OnScrollChangedListener { void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt); } private OnScrollChangedListener mOnScrollChangedListener; public NotifyingScrollView(Context context) { super(context); } public NotifyingScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public NotifyingScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (mOnScrollChangedListener != null) { mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt); } } public void setOnScrollChangedListener(OnScrollChangedListener listener) { mOnScrollChangedListener = listener; } @Override protected float getTopFadingEdgeStrength() { // http://stackoverflow.com/a/6894270/244576 if (mDisableEdgeEffects && Build.VERSION.SDK_INT 《 Build.VERSION_CODES.HONEYCOMB) { return 0.0f; } return super.getTopFadingEdgeStrength(); } @Override protected float getBottomFadingEdgeStrength() { // http://stackoverflow.com/a/6894270/244576 if (mDisableEdgeEffects && Build.VERSION.SDK_INT 《 Build.VERSION_CODES.HONEYCOMB) { return 0.0f; } return super.getBottomFadingEdgeStrength(); } }
更多文章:
消火栓箱安装图集(薄型单栓带消防软管卷盘消火栓箱和15s202-15的安装图)
2024年5月14日 19:56
怎样用易语言编写12306购票软件?新版 12306怎么自动抢票
2024年5月19日 13:33
u盘文件夹exe病毒专杀工具(u盘病毒专杀工具usbcleaner6.0怎么去掉U盘写保护)
2024年7月21日 09:40
杀毒软件nod32(ESET NOD32防病毒软件好还是360杀毒软件好,高手请解)
2024年8月29日 02:10
星战帝国的玩家FAQ?为什么星战里帝国会造4条腿的AT-AT和两条腿的步行机不但移动速度慢,而且被打断一条腿不就直接
2024年6月30日 04:57
恒泰证券交易软件下载(恒泰证券开户后怎么登陆交易 如何登陆恒泰证券)
2024年8月6日 23:26
上海曼朗市场营销策划有限公司怎么样?曼朗优化能力怎么样,有合作过的朋友来说说吗
2024年6月19日 13:48