Android 自定义TextView去除paddingTop和paddingBottom

Android 自定义TextView去除paddingTop和paddingBottom

最近项目中需要用libgdx渲染一个Android的TextView, 但是绘制出来的TextView总是默认带有paddingTop和paddingBottom, 如下图所示:

网上有很多解决方案,例如在xml中设置如下属性:

android:lineSpacingMultiplier="0.8"
android:includeFontPadding="false"

或者设置margin为负值等等。 但是以上方法在6.0之后都没什么卵用。

只有一种方法可以做到,就是自定义TextView

package com.ef.smallstar.common.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.util.AttributeSet;

/**
 * Created by Danny on 17/8/28.
 *
 * this is a Android TextView without padding top & padding bottom
 */

public class TextViewWithoutPadding extends android.support.v7.widget.AppCompatTextView {

  private final Paint mPaint = new Paint();

  private final Rect mBounds = new Rect();

  public TextViewWithoutPadding(Context context) {
    super(context);
  }

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

  public TextViewWithoutPadding(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @Override
  protected void onDraw(@NonNull Canvas canvas) {
    final String text = calculateTextParams();

    final int left = mBounds.left;
    final int bottom = mBounds.bottom;
    mBounds.offset(-mBounds.left, -mBounds.top);
    mPaint.setAntiAlias(true);
    mPaint.setColor(getCurrentTextColor());
    canvas.drawText(text, -left, mBounds.bottom - bottom, mPaint);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    calculateTextParams();
    setMeasuredDimension(mBounds.width() + 1, -mBounds.top + 1);
  }

  private String calculateTextParams() {
    final String text = getText().toString();
    final int textLength = text.length();
    mPaint.setTextSize(getTextSize());
    mPaint.getTextBounds(text, 0, textLength, mBounds);
    if (textLength == 0) {
      mBounds.right = mBounds.left;
    }
    return text;
  }
}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android中TextView和ImageView实现倾斜效果

    TextView倾斜: 想做一个倾斜的TextView,想海报上显示的那样 ,在网上找例子一直不能实现,看了看TextView源码,发现很简单,为方便像我一样糊涂的孩纸,贴出来了. 首先需要先自定义一个TextView public class MyTextView extends TextView{ public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protec

  • Android中TextView显示圆圈背景或设置圆角的方法

    前言 在我们学习android这么久,而且使用TextView那么长时间,我们一直没有用过给TextView添加背景,或者是给TextView添加添加边框,以及怎么样设置TextView的形状.今天在写代码的时候就用到了,怎么在java代码部分设置TextView的背景,和TextView的形状及边框. 方法如下: 接下来我们来看一下,怎么在Java代码部分怎么设置TextView的背景颜色,其实很简单的就一句话. tvTemp.setBackgroundColor(Color.parseCol

  • Android TextView中部分文字高亮显示

    Android  TextView中部分文字高亮显示 /** * 关键字高亮显示 * * @param context 上下文 * @param text 需要显示的文字 * @param target 需要高亮的关键字 * @param color 高亮颜色 * @param start 头部增加高亮文字个数 * @param end 尾部增加高亮文字个数 * @return 处理完后的结果 */ public static SpannableString highlight(Context

  • Android TextView实现带链接文字事件监听的三种常用方式示例

    本文实例讲述了Android TextView实现带链接文字事件监听的三种常用方式.分享给大家供大家参考,具体如下: /** * TextView实现文字链接跳转功能 * @description: * @author ldm * @date 2016-4-21 下午4:34:05 */ public class TextViewLinkAct extends Activity { private TextView tv_3; private TextView tv_4; @Override p

  • Android用户输入自动提示控件AutoCompleteTextView使用方法

    一.简介 1.AutoCompleteTextView的作用 2.AutoCompleteTextView的类结构图 也就是拥有EditText的各种功能 3.AutoCompleteTextView工作原理 AutoCompleteTextView的自动提示功能肯定需要适配器提供数据 4.Android里的适配器 5.适合AutoCompleteTextView的适配器 ArrayAdapter 二.AutoCompleteTextView实现自动提示的方法 1)AutoCompleteTex

  • Android自定义textview实现竖直滚动跑马灯效果

    本文实例为大家分享了Android自定义textview实现跑马灯效果的具体代码,供大家参考,具体内容如下 xml布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.c

  • Android实现带动画效果的可点击展开TextView

    本文为大家分享了Android实现带动画效果的可点击展开TextView 制作代码,效果图: 收起(默认)效果: 点击展开后的效果: 源码: 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/a

  • Android TextView实现图文混合编排的方法

    本文实例为大家分享了Android TextView图文混合编排的具体代码,供大家参考,具体内容如下 实现技术细节不难,两个要点: 1.html代码的混合编写. 2.重写ImageGetter. 例如: 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • Android TextView对齐的两种方法

    Android TextView对齐的两种方法 在写Android布局文件时, 经常碰到如下图的TextView左右对齐的情况, 即姓名和手机号码纵向对齐.. 第一种方法:  在姓和名之间加空格, 但是如果用键盘的空格会在一些机型上对齐.一些机型上不对齐. \u3000是全角空格:  \u0020是半角空格,效果跟在英文输入法下直接敲键盘空格一样. 这里要用全角空格,  占位一个汉字. <TextView android:layout_width="wrap_content" a

  • Android 自定义TextView去除paddingTop和paddingBottom

    Android 自定义TextView去除paddingTop和paddingBottom 最近项目中需要用libgdx渲染一个Android的TextView, 但是绘制出来的TextView总是默认带有paddingTop和paddingBottom, 如下图所示: 网上有很多解决方案,例如在xml中设置如下属性: android:lineSpacingMultiplier="0.8" android:includeFontPadding="false" 或者设

  • Android自定义TextView仿微信朋友圈文字展开全文功能

    Android自定义TextView仿微信朋友圈文字信息,展开全文功能 代码及注释如下: 首先写一个xml文件 showmore.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical

  • Android自定义TextView实现文字图片居中显示的方法

    最近有个需求是这样的,人民币的符号"¥"因为安卓手机系统的不一致导致符号不是完全一样,所以用美工的给的图片代替,考虑到用的地方比较多,所以想着写一个继承于线性布局的组合控件,后来一想,安卓中不是有TextView吗,这个自带图片的控件,后来写了个demo,因为我是用的MatchParent,导致问题出现,人民币符号不是和文字一样的居中,因此才有了这篇博文,让我们来自定义TextView吧,这个场景用的比较多. 分析下TextView的源码 我们先来分析下TextView的源码,因为Te

  • Android 自定义TextView实现滑动解锁高亮文字

    下面一段代码给大家分享Android 自定义TextView实现滑动解锁高亮文字效果,具体代码如下所示: public class HightLightTextView extends TextView { // 存储view的宽度 private int mTextViewWidth = 0; // 画笔 private Paint mPaint; // 线性渲染 private LinearGradient mLinearGradient; // 存储变换的matrix private Ma

  • Android 自定义Dialog去除title导航栏的解决方法

    如下所示: Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(view); 以上这篇Android 自定义Dialog去除title导航栏的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Android自定义TextView实现drawableLeft内容居中

    如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextView package com.test.signcalendar.weight; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; i

  • Android自定义TextView跑马灯效果

    Android自带的跑马灯效果不太好控制,还必须要满足条件才能有效果,而且速度不受控制.前面我的博客中有一篇就是用Android自带的跑马灯效果的,但是基于不同的使用效果,这里在网上找到了一个更好的方法.沿用了作者的一些方法,但是添加了更好的扩展功能,和大家一起分享.这里面有控制往左往右两个方向的实现. 1.首先是简单的布局main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android 自定义TextView实现文本内容自动调整字体大小

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

  • Android自定义TextView实现文字倾斜效果

    前言 由于Android自带的TextView控件没有提供倾斜的(我暂时没有找到),我们可以自定义控件来实现,下面首先来看我们实现的效果图. TextView文字倾斜 其实实现很简单,下面我们来看实现步骤: 1.新建一个类 LeanTextView继承TextView public class LeanTextView extends TextView { public int getmDegrees() { return mDegrees; } public void setmDegrees(

随机推荐