Android 自定义 TextView drawableTop 图标与文字左对齐(效果图)

public class DrawableTopLeftTextView extends TextView {

	private Paint mPaint;
	private float fFontHeight;
	private Drawable[] drawables;
	private int leftMargin = 40; //TODO 这个要通过代码获取,不能硬编码

	public DrawableTopLeftTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	public DrawableTopLeftTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	public DrawableTopLeftTextView(Context context) {
		super(context);
		init();
	}

	private void init() {
		mPaint = getPaint();
		//mPaint.setTextSize(56.0f);
		mPaint.setColor(Color.parseColor("#cccccccc"));
		FontMetrics fm = mPaint.getFontMetrics();
		fFontHeight = (float) Math.ceil(fm.descent - fm.ascent);
		drawables = getCompoundDrawables();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		if (drawables != null) {
			Drawable drawable = drawables[1]; // top
			if (drawable != null) {
				final float textY = getY() + drawable.getIntrinsicHeight() + fFontHeight - 5;
				canvas.drawText(getText().toString(), 0, textY, mPaint);
				canvas.clipRect(drawable.getBounds());
				canvas.drawBitmap(getBitmap(drawable), getLeft()+leftMargin, getTop(), mPaint);
				drawable.draw(canvas);
				canvas.save();
			}
		}
		super.onDraw(canvas);
	}

	private final static Bitmap getBitmap(Drawable drawable){
		BitmapDrawable bd = (BitmapDrawable) drawable;
		return bd.getBitmap();
	}
}
<com.bluetooth.light.widget.DrawableTopLeftTextView
            android:id="@+id/signal_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:drawableTop="@drawable/signal_logo"
            android:text="@string/signal"
            android:textColor="#cccccccc"
            android:textSize="24sp" />

效果图

时间: 2024-10-10 21:22:08

Android 自定义 TextView drawableTop 图标与文字左对齐(效果图)的相关文章

Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)

/** * 带文本提示的进度条 */ public class TextProgressBar extends ProgressBar { private String text; private Paint mPaint; public TextProgressBar(Context context) { super(context); initText(); } public TextProgressBar(Context context, AttributeSet attrs, int d

css实现一行文字居中,多行文字左对齐

问题及场景: 当内容能一行显示在盒子内时,文字居中对齐. 当内容过多换行后显示在盒子内时,文字左对齐. 其实这种视觉上的需求还是蛮常见的.比如用于弹出提示框,当提示内容比较少时,内容居中显示在弹出框,提示内容比较多时,内容居左对齐.但是其纯CSS实现有点麻烦,一般就放掉这个需求,或者,使用JS实现. 解决方案: 效果如下 CSS实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta chars

Android 自定义TextView 实现文本间距

Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier. 但是有时候我们需要在TextView的文本之间有间距,两个字的话,我们可以在xml文件中,用敲空格的方式来实现,如果有很多文本或者是一个变量的文本呢.我们还这样用敲空格的方式来实现吗?oh no~! 如何实现行间距和文本间距呢?(请往下看 ↓). 1.设置TextView的

Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小

最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小 /**   * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小   * @author yzp   */   public class AutoFitTextView extends TextView {       private Paint mTextPaint;       private float mTextSize;          public AutoFitTextView(Context

iOS UITextField中的文字左对齐,垂直高度居中

textField.textAlignment = UITextAlignmentLeft; //水平左对齐 textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;  //垂直居中

UIButton文字左对齐以及增加边框

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button setFrame:CGRectMake(btnX, btnY, btnWidth, btnHeight)]; button.layer.borderWidth = 1; // 边框宽度设置为1 [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLe

android自定义TextView

Android控件中的TextView控件只有一个输入框,但是为了用于的操作方便我们应该实现一些功能: 1. 可以直接将内容删除的功能按钮 2. 可以记录用户以前输入的数据,同时能够将数据通过下拉显示,点击的时候实现输入 先上图: 下拉的图片没有做,所以和删除的图片使用同一个了,同志们可以直接在xml文件中更换就行了 分析: 肯定要使用自定义view来实现的,我们知道自定义view大概可以分为三类:自绘控件,组合控件,继承控件,我们这里是要进行增强的textView的功能,所以我这里使用的 是组

android 自定义键盘 KeyboardView的key 文字颜色发虚模糊

开发中自定义键盘是否遇到文字发虚吗??如下图: 解决办法: 1. 在key的xml中设置key文字不用keyLabel ,而用keyIcon,即用图片来代替文本,但是这种方法比较笨 2.最简单的是在keyboardview中设置两个属性即可: android:shadowColor="@color/c_white" android:shadowRadius="0.0" shadowColor 设置跟你按键的背景色一致即可!!! 这样按键的文字就会显示的很清晰了啊!!

android 自定义TextView&quot;会发脾气的TextView&quot;

转载请注明出处王亟亟的大牛路 Git上看到的一个自定义控件就搞来研究研究,蛮可爱的. 项目结构: 运行效果:很Q谈,谈的图片什么都 都可以换哦 自定义View: public class JelloToggle extends FrameLayout { private static final int DEFAULT_DURATION = 1000;//动画持续时间 private static final int UNCHECKED_JELLO_COLOR = 0xffadadad;//初始