调整android文本字的大小_android 富文本字体大小 - CSDN
精华内容
参与话题
  • 在做项目的时候,经常会遇到过一行文字有...这几个都实现了一行字有不同颜色,还有两个字体大小也不一样,我们下边一一介绍。 首先xml代码: <TextView android:id="@+id/tv1" android:layou...

    在做项目的时候,经常会遇到过一行文字有两种颜色。有时候直接会想到用多个TextView来实现。今天就介绍一下更为简单的方法,用一个TextView实现。

    效果:

    这里写图片描述

    这几个都实现了一行字有不同颜色,还有两个字体大小也不一样,我们下边一一介绍。

    首先xml代码:

    <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:textSize="18sp"
            android:text="Hello World!"
            />
        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:textSize="18sp"
            android:text="Hello World!"
            />
        <TextView
            android:id="@+id/tv3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:textSize="18sp"
            android:text="Hello World!"
            />
        <TextView
            android:id="@+id/tv4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:textSize="18sp"
            android:text="Hello World!"
            />
        <TextView
            android:id="@+id/tv5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:textSize="18sp"
            android:text="Hello World!"
            />
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    上图中的第一个TextView代码:

        String str1 = "今天<font color='#FF0000'>天气不错</font>";
        tv1.setText(Html.fromHtml(str1));
    • 1
    • 2

    第二个TextView将红色字体变小:

        String str2 = "今天<font color='#FF0000'><small>天气不错</small></font>";
        tv2.setText(Html.fromHtml(str2));
    • 1
    • 2

    第三个TextView将红色字体变大:

        String str3 = "今天<font color='#FF0000'><big>天气不错</big></font>";
        tv3.setText(Html.fromHtml(str3));
    • 1
    • 2

    上边三种情况都是固定字符的情况,那如果遇到变量该怎么办呢?其实也很简单。第四个TextView代码:

        String str4 = "天气不错";
        tv4.setText(Html.fromHtml("今天" + "<font color='#FF0000'>" + str4 + "</font>"));
    • 1
    • 2

    上面的实现方式都是使用的html标签的形式,下面我们使用系统自带的SpannableString来实现。
    第五个TextView代码:

        SpannableString spannableString = new SpannableString("今天天气不错");
        spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), 2, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            tv5.setText(spannableString);
    • 1
    • 2
    • 3

    setSpan方法有四个参数,ForegroundColorSpan是为文本设置前景色,也就是文字颜色。如果要为文字添加背景颜色,可替换为BackgroundColorSpan。第二个参数:2为文本颜色改变的起始位置,spannableString.length()为文本颜色改变的结束位置。最后一个参数为布尔型,可以传入以下四种:
    Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终止下标,包括起始下标
    Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终止下标,同时包括起始下标和终止下标
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终止下标,但都不包括起始下标和终止下标
    Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终止下标,包括终止下标

    展开全文
  • * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小 * @author yzp */ public class AutoFitTextView extends TextView { private Paint mTextPaint; private float mTextSize; public ...


    /**
     * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小
     * @author yzp
     */
    public class AutoFitTextView extends TextView {
    	private Paint mTextPaint;
    	private float mTextSize;
    
    	public AutoFitTextView(Context context) {
    		super(context);
    	}
    
    	public AutoFitTextView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    	}
    
    	/**
    	 * Re size the font so the specified text fits in the text box assuming the
    	 * text box is the specified width.
    	 * 
    	 * @param text
    	 * @param textWidth
    	 */
    	private void refitText(String text, int textViewWidth) {
    		if (text == null || textViewWidth <= 0)
    			return;
    		mTextPaint = new Paint();
    		mTextPaint.set(this.getPaint());
    		int availableTextViewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
    		float[] charsWidthArr = new float[text.length()];
    		Rect boundsRect = new Rect();
    		mTextPaint.getTextBounds(text, 0, text.length(), boundsRect);
    		int textWidth = boundsRect.width();
    		mTextSize = getTextSize();
    		while (textWidth > availableTextViewWidth) {
    			mTextSize -= 1;
    			mTextPaint.setTextSize(mTextSize);
    			textWidth = mTextPaint.getTextWidths(text, charsWidthArr);
    		}
    		this.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		super.onDraw(canvas);
    		refitText(this.getText().toString(), this.getWidth());
    	}
    }


    展开全文
  • import ... import android.content.Context; import android.graphics.Paint; import android.graphics.Paint.FontMetrics; import android.util.AttributeSet; import andro...
    import com.carspeak.client.util.DensityUtils;
    
    import android.content.Context;
    import android.graphics.Paint;
    import android.graphics.Paint.FontMetrics;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.TextView;
    
    public class ShadowTextView extends TextView {
        private static float DEFAULT_MIN_TEXT_SIZE = 10;
        private static float DEFAULT_MAX_TEXT_SIZE = 85;
    
        // Attributes
        private Paint testPaint;
        private float minTextSize, maxTextSize;
    
        private String TAG = "ShadowTextView";
        public ShadowTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            initialise();
        }
    
        public ShadowTextView(Context context) {
            super(context);
        }
    
        public ShadowTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        @Override
        protected void onTextChanged(CharSequence text, int start,int lengthBefore, int lengthAfter) {
            super.onTextChanged(text, start, lengthBefore, lengthAfter);
            refitText(text.toString(), this.getWidth(),this.getHeight());
        }
        private void initialise() {
            testPaint = new Paint();
            testPaint.set(this.getPaint());
            // max size defaults to the intially specified text size unless it is
            // too small
            maxTextSize = this.getTextSize();
            if (maxTextSize <= DEFAULT_MAX_TEXT_SIZE) {
                maxTextSize = DEFAULT_MAX_TEXT_SIZE;
            }
            minTextSize = DEFAULT_MIN_TEXT_SIZE;
        };
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            if (w != oldw) {
    //            refitText(this.getText().toString(), w);  //原本是需要执行的
            }
        }
    
        /**
         * Re size the font so the specified text fits in the text box * assuming
         * the text box is the specified width.
         */
    private void refitText(String text, int textWidth,int textHeight) {
            
            int Length = text.length();
            //直接根据字符长度来调整字体大小  最大长度为20
    //        this.setTextSize(DensityUtils.dp2px(this.getContext(), trySize));
    //        testPaint.set(this.getPaint());
            if (textWidth > 0) {
                int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();  //获取改TextView的画布可用大小        
                float trySize = maxTextSize;
                float scaled = getContext().getResources().getDisplayMetrics().scaledDensity;
    //            Log.v(TAG, "availableWidth="+availableWidth + ";scaled="+scaled);
                testPaint.setTextSize(trySize*scaled);   //模拟 注意乘以scaled
                while ((trySize > minTextSize)&& (testPaint.measureText(text) > availableWidth)) 
                {
                    
                    trySize -= 2;
                    FontMetrics fm = testPaint.getFontMetrics();
                    double rowFontHeight = (Math.ceil(fm.descent - fm.top) + 2);
                    float scaled1 = (float) (this.getHeight() /rowFontHeight );  //字体的行数   textview的总高度/每行字的高度
                    float scaled2 = (float) ((testPaint.measureText(text) / availableWidth));  //也是行数  所有字的总长度/textview的有效宽度
                    
    //                Log.v(TAG, "trySize="+trySize + ";testPaint.measureText(text)="+testPaint.measureText(text)+";scaled1="+scaled1+";scaled2="+scaled2+";rowFontHeight="+rowFontHeight);
                    if((scaled2*rowFontHeight*1.9)<this.getHeight())  //1.9代表是1.9的行高(1个字体本身,0.9的行距 ,大致差不多,没有实际测过)
                        break;
                    if (trySize <= minTextSize) {
                        trySize = minTextSize;
                        break;
                    }
                    testPaint.setTextSize(trySize*scaled);
                }
                this.setTextSize(trySize);
    //            Log.v(TAG, "trySize="+trySize+";maxTextSize="+maxTextSize+";minTextSize="+minTextSize);
            }
    }
    //    private void refitText(String text, int textWidth,int textHeight) {
            if (textWidth > 0) {
                int availableWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();  //获取改TextView的画布可用大小        
                float trySize = maxTextSize;
                float scaled = getContext().getResources().getDisplayMetrics().scaledDensity;
                testPaint.setTextSize(trySize*scaled);   //模拟 注意乘以scaled
                while ((trySize > minTextSize)&& (testPaint.measureText(text) > availableWidth)) {
                    trySize -= 2;
                    FontMetrics fm = testPaint.getFontMetrics();
                    float scaled1 = (float) (this.getHeight() / (Math.ceil(fm.descent - fm.top) + 2));
                    float scaled2 = (float) ((testPaint.measureText(text) / availableWidth));
                    if (scaled1 >= 1.75 & scaled1 >= scaled2) { // 注意1.75是三星s4 小米3  的适合数值(当然包括我的联想了)
                        break;
                    }
                if (trySize <= minTextSize) {
                    trySize = minTextSize;
                    break;
                }
                testPaint.setTextSize(trySize*scaled);
                }
                this.setTextSize(trySize);      //等同于this.getPaint().set(trySize*scaled);
            }
    //    }
    
    }

    使用:(注意不能给默认字体大小,否则有问题)

    <com.view.ShadowTextView
                        android:id="@+id/tv_shadow_preview"
                        android:layout_width="@dimen/projection_screen_width_4_3"
                        android:layout_height="@dimen/projection_screen_height_4_3"
                        android:layout_centerHorizontal="true"
                        android:background="#000"
                        android:text="字幕"
                        android:gravity="center"
                        android:textColor="#fff" />

    Android的TextView控件会在文字上下加上默认的padding值,该值随着文字大小成正比变化,只要为TextView设置android:includeFontPadding=”false”;就可以减少大部分上下空白,而且如果文字sp值小,也就看不出空白了

    展开全文
  • Android Studio设置字体大小

    万次阅读 2020-09-23 14:15:31
    Android Studio设置字体大小

                                                                                同学,你好!


     

    1. settings
    2. Font 

     

    注意:此时无法修改,需要先保存才可以修改

    1. 点击 Save as 输入任意名字
    2. 修改字体大小和字体样式

    若觉得有用请点赞或关注~以后会发布更多有用的内容。

     

     

     

    展开全文
  • Android Studio字体大小修改

    千次阅读 2019-05-08 22:44:08
    Android Studio字体大小修改 软件界面字体大小 修改编辑区域字体
  • Android系统移植与调试——教你如何修改Android默认字体大小和设置字体大小比例   关于如何修改Android默认字体及设置字体大小比例的问题,很多人在网上咨询,今天来这里为大家总结分享解决方法!  因为...
  • 文章目录一、前言二、设置`TextView`文本自动调整大小2.1 默认缩放2.2 按粒度缩放2.3 按预设定值缩放三、使用支持库实现文本自动缩放 一、前言     在应用开发过程中,可能需要这样的场景:一个...
  • Android studio 如何设置字体大小

    千次阅读 2018-04-26 09:42:32
    Android studio字体设置分为两种:一种是软件字体设置,另一种是代码字体设置。此处以Android Studio 2.2 正式版为例做说明。 1. 软件字体设置 1.1 从File---&gt;Settings启动设置面板如下图: 1.2 依次选择...
  • 小伙伴们大家好呀,这次介绍一个稍微有点意思的View,在很多阅读类、新闻类的APP上都标配的字体大小调整功能。100多行代码就可以实现,来看看效果吧! 思路分析 1、刻度线代表着每个字体的大小取值,是不是...
  • 调整字体大小后,tab->空格,对齐模式不对齐, 字体名选择terminal,对齐效果非常好
  • android根据字体大小设置控件高度

    千次阅读 2014-04-10 16:11:28
    android根据设备密度大小设置合适的kong'jian
  • Android TextView利用measureText自适应文本字体大小宽度常常有这种情况,UI设计师限定一个文本TextView的宽度值比如80dip,但是该文本长度很长,于是造成文本不能正常显示,针对这种长文本长度超过TextView自身限定...
  • edt = (EditText) findViewById(R.id.edt);  SpannableString string = new SpannableString(... //第一个属性代表提示文案的字体大小,第二个参数boolean dip如果为true,表示前面的字体大小单位为dip,否则为像素
  • AppCompatTextView最显著的特点是可以自适应字体宽度大小变化。这个特点很有用,有些开发场景下,UI设计限定了一个文本的宽度,但是文本的长度可能比较长,如果设定一个固定的textSize,就导致一部分文本无法显示。...
  • android4.0起系统设置的”显示“提供设置字体大小的选项。以三星s4为例,在“设置-我的设备-显示-字体大小”中选择,可以调整系统的字体。这个设置直接会影响到所有sp为单位的字体适配,所以很多app在设置了系统...
  • 直接上代码AutofitTextView.Javapublic class AutofitTextView extends TextView implements AutofitHelper.OnTextSizeChangeListener { private AutofitHelper mHelper; public AutofitTextView(Context context) {
  • FontResize是一个仿微信/支付宝 字体大小 调整控件的库
  • 我想在屏幕上并列排6个等宽的按钮,也就是每个按钮的weight均为1,每个按钮的文字内容有长有短,并且我想让文字刚好塞满按钮(padding已经设置为0),而按钮的宽度是会随着屏幕宽度变化的,因此文字大小只能动态设置,...
  • android listview改变字体大小、颜色

    万次阅读 2012-06-28 11:19:18
    项目中需要用到listview,而Android 默认的listView 控件是不支持更改字体颜色,字体大小的。抽空写了一个小demo测试下 代码如下: //listview适配器,调整字体大小、颜色等  private class MyAdapter extends ...
  • 操作系统:Windows 10 x64 ...备注:参考里面提到,要设置编辑器的字体大小,必须将Android Studio提供的主题另存为,才能修改字体大小。而我的却不用,估计是因为IDE的版本不同,有些操作已经不一样了。 菜...
1 2 3 4 5 ... 20
收藏数 7,484
精华内容 2,993
关键字:

调整android文本字的大小