ActionBar “标题”居中并添加“返回”

最近在做项目,前面产品说遵从android的原生风格,title左对齐。结果现在,让把title居中,说为了保持和IOS的一致。没办法,我能改。

于是想到了自定义ActionBar ,但是由于我的项目里有很多menu项,而且与menu有交互,如果自定义,我需要把事件都重新注册拦截,自己处理交互,感觉很麻烦,如是,觉得直接在ActionBar上动手。

在几经尝试下,突然想到了ActionBar是可以浮动的,那么就可以把ActionBar背景设置透明,下面放置一个居中的TextView,结果效果相当OK,而且原封不动的保留了

actionbar 原有的菜单与交互逻辑。

实现如下:

style文件:

    
    
    

代码设置:

		super.onCreate(savedInstanceState);
		//这个要在super.onCreate后面,否则报错 空指针
		//actionBar浮动起来
		supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
		setContentView(R.layout.activity_main);

layout:

在布局顶部,加了一个与ActionBar高度一致的TextView,由于ActionBar是浮动的,在改view的上一层,且透明,所以,可以看到下层TextView的内容



    

    

        
    

效果如下:

ActionBar “标题”居中并添加“返回”_第1张图片


效果是挺好的,但是,由于要在左边显示“返回”两个字,又该怎么处理呢?

由于系统的 左边的那个死一个图片,于是想法是把“返回”两个字 画到上面去,

代码如下:

	actionBar.setIcon(getNumberDrawable());


	private Drawable getNumberDrawable() {
		int width = dip2px(getBaseContext(), 58);
		int height = dip2px(getBaseContext(), 48);
		Bitmap bmp = Bitmap
				.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 这个返回的bitmap
		// 就是透明的
		Canvas canvas = new Canvas(bmp);
		Paint paint = new Paint();

		RectF oval = new RectF(0, 0, width, height);

		// canvas.drawRect(oval, paint);//画上这个就会有黑底
		paint.setTextSize(sp2px(getBaseContext(), 28));
		FontMetricsInt fontMetrics = paint.getFontMetricsInt();// 文字大小的设置,要在这个前面,否则文字计算不居中

		float baseline = oval.top
				+ (oval.bottom - oval.top - fontMetrics.bottom + fontMetrics.top)
				/ 2 - fontMetrics.top;

		paint.setTextAlign(Paint.Align.CENTER);
		paint.setFlags(Paint.ANTI_ALIAS_FLAG);
		paint.setColor(Color.WHITE);
		canvas.drawText("返回", oval.centerX(), baseline, paint);

		return new BitmapDrawable(getResources(), bmp);
	}

效果如下:

ActionBar “标题”居中并添加“返回”_第2张图片


你可能感兴趣的:(Android,UI)