Android自定义控件文本居中显示

博主分享了自己初次尝试Android自定义控件的经历,聚焦于如何让TextView的文字居中显示。通过分析和查阅资料,解决了Canvas.drawText()方法绘制文字偏上的问题,并最终实现了文本的居中对齐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次在这里写博客,各位大侠勿喷啊,小弟在此感激不尽

从事java以来,一直在做javaEE的开发,android虽然以前曾经学过,不过大概忘的也差不多了,最近因为工作需要,准备把android也做起来,回回炉。

一时也不知道从何开始,只知道对于android自定义控件的了解还是挺薄弱的,就从此开始吧

1、先自定义一个view,先来个简单的吧,自定义一个TextView体验一下,这里只列出了重写的onDraw方法,其它方法未变

@Override
	protected void onDraw(Canvas canvas) { 
		super.onDraw(canvas);
		String text = "fishpan"; 
		Paint paint = new Paint();   
		int color = paint.getColor();//	保存旧的画笔颜色
		paint.setColor(Color.YELLOW);	// 设置画笔颜色
		canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);	//	画一个黄色背景
		paint.setColor(color);	// 恢复画笔颜色
		canvas.drawText(text, 0, 0, paint);
	}

2、将自定义控件写在布局文件中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_height="match_parent"
   android:layout_width="match_parent"
   >

   <com.fishpan.view.TextView
       android:layout_width="200dp"
       android:layout_height="100dp"
       android:layout_centerInParent="true" />

</RelativeLayout>

3、看下预览效果


哎尼玛,这是啥情情况?

开始度娘的时候到了,结果在网上发现了这篇文章Canvas.drawText绘制文字为什么会偏上?

4、代码修改

@Override
	protected void onDraw(Canvas canvas) { 
		super.onDraw(canvas);
		String text = "fikshpan"; 
		Paint paint = new Paint();   
		int color = paint.getColor();//	保存旧的画笔颜色
		paint.setColor(Color.YELLOW);	// 设置画笔颜色
		canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);	//	画一个黄色背景
		paint.setColor(color);	// 恢复画笔颜色
		Rect rect = new Rect();
		paint.getTextBounds(text, 0, text.length(), rect);
		canvas.drawText(text, 0 - rect.left, 0 - rect.top, paint);
	}
5、再次运行效果

    

终于把字都显示出来了

6、文字正常显示出来了,怎么才能居中显示呢

 

@Override
	protected void onDraw(Canvas canvas) { 
		super.onDraw(canvas);
		String text = "fishpan"; 
		Paint paint = new Paint();   
		
		//	画个漂亮的背景
		int color = paint.getColor();//	保存旧的画笔颜色
		paint.setColor(Color.YELLOW);	// 设置画笔颜色
		canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);	//	画一个黄色背景
		paint.setColor(color);	// 恢复画笔颜色
		
		//	写文本
		Rect rect = new Rect();
		paint.getTextBounds(text, 0, text.length(), rect);
		//canvas.drawText(text, 0 - rect.left, 0 - rect.top, paint);//	完整显示文本内容
		canvas.drawText(text, 
				0 - rect.left + (getWidth() - rect.width())/2, 
				0 - rect.top + (getHeight() - rect.height())/2, 
				paint);//居中显示文本
	}

7、看下运行效果


显示正常


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值