Text设置

本文介绍了一个实用的 Android TextViewUtil 类,通过该类可以轻松地为 TextView 中的文本设置各种样式,包括字体大小、颜色、下划线、删除线等。这对于开发者来说非常有用,能够快速实现丰富的文本展示效果。
  1. import android.content.Context;  
  2. import android.graphics.Color;  
  3. import android.text.SpannableString;  
  4. import android.text.Spanned;  
  5. import android.text.style.AbsoluteSizeSpan;  
  6. import android.text.style.BackgroundColorSpan;  
  7. import android.text.style.BulletSpan;  
  8. import android.text.style.ForegroundColorSpan;  
  9. import android.text.style.RelativeSizeSpan;  
  10. import android.text.style.ScaleXSpan;  
  11. import android.text.style.StrikethroughSpan;  
  12. import android.text.style.StyleSpan;  
  13. import android.text.style.SubscriptSpan;  
  14. import android.text.style.SuperscriptSpan;  
  15. import android.text.style.TypefaceSpan;  
  16. import android.text.style.UnderlineSpan;  
  17.   
  18. public class TextViewUtil {  
  19.   
  20.     /** 
  21.      * 设置字体大小,用px 
  22.      *  
  23.      * @param context 
  24.      *  
  25.      * @param str 
  26.      *            目标字符串 
  27.      * @param start 
  28.      *            开始位置 
  29.      * @param end 
  30.      *            结束位置 
  31.      * @param pxSize 
  32.      *            像素大小 
  33.      * @return 
  34.      */  
  35.     public SpannableString getSizeSpanUsePx(Context context, String str, int start, int end, int pxSize) {  
  36.         SpannableString ss = new SpannableString(str);  
  37.         ss.setSpan(new AbsoluteSizeSpan(pxSize), 4, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  38.         return ss;  
  39.     }  
  40.   
  41.     /** 
  42.      * 设置字体大小,用dip 
  43.      *  
  44.      * @param context 
  45.      *  
  46.      * @param str 
  47.      *            目标字符串 
  48.      * @param start 
  49.      *            开始位置 
  50.      * @param end 
  51.      *            结束位置 
  52.      * @param dipSize 
  53.      *            像素大小 
  54.      * @return 
  55.      */  
  56.     public SpannableString getSizeSpanUseDip(Context context, String str, int start, int end, int dipSize) {  
  57.         SpannableString ss = new SpannableString(str);  
  58.         ss.setSpan(new AbsoluteSizeSpan(dipSize, true), 4, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  59.         return ss;  
  60.     }  
  61.   
  62.     /** 
  63.      * 设置字体大小,用sp 
  64.      *  
  65.      * @param context 
  66.      *  
  67.      * @param str 
  68.      *            目标字符串 
  69.      * @param start 
  70.      *            开始位置 
  71.      * @param end 
  72.      *            结束位置 
  73.      * @param spSize 
  74.      *            sp大小 
  75.      * @return 
  76.      */  
  77.     public SpannableString getSizeSpanSpToPx(Context context, String str, int start, int end, int spSize) {  
  78.         SpannableString ss = new SpannableString(str);  
  79.         ss.setSpan(new AbsoluteSizeSpan(DisplayUtil.sp2px(context, spSize)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  80.         return ss;  
  81.     }  
  82.   
  83.     /** 
  84.      * 设置字体相对大小 
  85.      *  
  86.      * @param context 
  87.      * @param str 
  88.      *            目标字符串 
  89.      * @param start 
  90.      *            开始位置 
  91.      * @param end 
  92.      *            结束位置 
  93.      * @param relativeSize 
  94.      *            相对大小 如:0.5f,2.0f 
  95.      * @return 
  96.      */  
  97.     public SpannableString getRelativeSizeSpan(Context context, String str, int start, int end, float relativeSize) {  
  98.         SpannableString ss = new SpannableString(str);  
  99.         ss.setSpan(new RelativeSizeSpan(relativeSize), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  100.         return ss;  
  101.     }  
  102.   
  103.     /** 
  104.      * 设置字体 
  105.      *  
  106.      * @param context 
  107.      * @param str 
  108.      *            目标字符串 
  109.      * @param start 
  110.      *            开始位置 
  111.      * @param end 
  112.      *            结束位置 
  113.      * @param typeface 
  114.      *            字体类型 如:default,efault-bold,monospace,serif,sans-serif 
  115.      * @return 
  116.      */  
  117.     public SpannableString getTypeFaceSpan(Context context, String str, int start, int end, String typeface) {  
  118.         SpannableString ss = new SpannableString(str);  
  119.         ss.setSpan(new TypefaceSpan(typeface), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  120.         return ss;  
  121.     }  
  122.   
  123.     /** 
  124.      * 设置字体形体 
  125.      *  
  126.      * @param context 
  127.      * @param str 
  128.      *            目标字符串 
  129.      * @param start 
  130.      *            开始位置 
  131.      * @param end 
  132.      *            结束位置 
  133.      * @param style 
  134.      *            字体类型 如: Typeface.NORMAL正常 Typeface.BOLD粗体 Typeface.ITALIC斜体 
  135.      *            Typeface.BOLD_ITALIC粗斜体 
  136.      * @return 
  137.      */  
  138.     public SpannableString getStyleSpan(Context context, String str, int start, int end, int style) {  
  139.         SpannableString ss = new SpannableString(str);  
  140.         ss.setSpan(new StyleSpan(style), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  141.         return ss;  
  142.     }  
  143.   
  144.     /** 
  145.      * 设置字体下划线 
  146.      *  
  147.      * @param context 
  148.      * @param str 
  149.      *            目标字符串 
  150.      * @param start 
  151.      *            开始位置 
  152.      * @param end 
  153.      *            结束位置 
  154.      * @return 
  155.      */  
  156.     public SpannableString getUnderLineSpan(Context context, String str, int start, int end) {  
  157.         SpannableString ss = new SpannableString(str);  
  158.         ss.setSpan(new UnderlineSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  159.         return ss;  
  160.     }  
  161.   
  162.     /** 
  163.      * 设置字体删除线 
  164.      *  
  165.      * @param context 
  166.      * @param str 
  167.      *            目标字符串 
  168.      * @param start 
  169.      *            开始位置 
  170.      * @param end 
  171.      *            结束位置 
  172.      * @return 
  173.      */  
  174.     public SpannableString getDeleteLineSpan(Context context, String str, int start, int end) {  
  175.         SpannableString ss = new SpannableString(str);  
  176.         ss.setSpan(new StrikethroughSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  177.         return ss;  
  178.     }  
  179.   
  180.     /** 
  181.      * 设置上标 
  182.      *  
  183.      * @param context 
  184.      * @param str 
  185.      *            目标字符串 
  186.      * @param start 
  187.      *            开始位置 
  188.      * @param end 
  189.      *            结束位置 
  190.      * @return 
  191.      */  
  192.     public SpannableString getSuperscriptSpan(Context context, String str, int start, int end) {  
  193.         SpannableString ss = new SpannableString(str);  
  194.         ss.setSpan(new SuperscriptSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  195.         return ss;  
  196.     }  
  197.   
  198.     /** 
  199.      * 设置放大系数 
  200.      *  
  201.      * @param context 
  202.      * @param str 
  203.      *            目标字符串 
  204.      * @param start 
  205.      *            开始位置 
  206.      * @param end 
  207.      *            结束位置 
  208.      * @param scale 
  209.      *            放大多少倍,x轴方向,y轴不变 如:0.5f, 2.0f 
  210.      * @return 
  211.      */  
  212.     public SpannableString getScaleSpan(Context context, String str, int start, int end, float scale) {  
  213.         SpannableString ss = new SpannableString(str);  
  214.         ss.setSpan(new ScaleXSpan(scale), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  215.         return ss;  
  216.     }  
  217.   
  218.     /** 
  219.      * 设置下标 
  220.      *  
  221.      * @param context 
  222.      * @param str 
  223.      *            目标字符串 
  224.      * @param start 
  225.      *            开始位置 
  226.      * @param end 
  227.      *            结束位置 
  228.      * @return 
  229.      */  
  230.     public SpannableString getSubscriptSpan(Context context, String str, int start, int end) {  
  231.         SpannableString ss = new SpannableString(str);  
  232.         ss.setSpan(new SubscriptSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  233.         return ss;  
  234.     }  
  235.   
  236.     /** 
  237.      * 设置背景色 
  238.      *  
  239.      * @param context 
  240.      * @param str 
  241.      *            目标字符串 
  242.      * @param start 
  243.      *            开始位置 
  244.      * @param end 
  245.      *            结束位置 
  246.      * @param color 
  247.      *            颜色值 如Color.BLACK 
  248.      * @return 
  249.      */  
  250.     public SpannableString getBackGroundColorSpan(Context context, String str, int start, int end, int color) {  
  251.         SpannableString ss = new SpannableString(str);  
  252.         ss.setSpan(new BackgroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  253.         return ss;  
  254.     }  
  255.   
  256.     /** 
  257.      * 设置背景色 
  258.      *  
  259.      * @param context 
  260.      *  
  261.      * @param str 
  262.      *            目标字符串 
  263.      * @param start 
  264.      *            开始位置 
  265.      * @param end 
  266.      *            结束位置 
  267.      * @param color 
  268.      *            颜色值 如:#CCCCCC 
  269.      * @return 
  270.      */  
  271.     public SpannableString getBackGroundColorSpan(Context context, String str, int start, int end, String color) {  
  272.         SpannableString ss = new SpannableString(str);  
  273.         ss.setSpan(new BackgroundColorSpan(Color.parseColor(color)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  274.         return ss;  
  275.     }  
  276.   
  277.     /** 
  278.      * 设置前景色 
  279.      *  
  280.      * @param context 
  281.      *  
  282.      * @param str 
  283.      *            目标字符串 
  284.      * @param start 
  285.      *            开始位置 
  286.      * @param end 
  287.      *            结束位置 
  288.      * @param color 
  289.      *            颜色值 如Color.BLACK 
  290.      * @return 
  291.      */  
  292.     public SpannableString getForegroundColorSpan(Context context, String str, int start, int end, int color) {  
  293.         SpannableString ss = new SpannableString(str);  
  294.         ss.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  295.         return ss;  
  296.     }  
  297.   
  298.     /** 
  299.      * 设置前景色 
  300.      *  
  301.      * @param context 
  302.      *  
  303.      * @param str 
  304.      *            目标字符串 
  305.      * @param start 
  306.      *            开始位置 
  307.      * @param end 
  308.      *            结束位置 
  309.      * @param color 
  310.      *            颜色值 如:#CCCCCC 
  311.      * @return 
  312.      */  
  313.     public SpannableString getForegroundColorSpan(Context context, String str, int start, int end, String color) {  
  314.         SpannableString ss = new SpannableString(str);  
  315.         ss.setSpan(new ForegroundColorSpan(Color.parseColor(color)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  316.         return ss;  
  317.     }  
  318. }  
<think>好的,用户现在的问题是“Text设置左对齐”,需要在QML中实现Text元素的左对齐。首先,我需要回忆QML中Text的对齐属性。QML的Text元素有一个alignment属性,用于控制文本的对齐方式。左对齐对应的枚举值应该是Qt.AlignLeft或者Qt.AlignHCenter之类的?不过具体来说,Qt的对齐方式是组合的,水平和垂直方向可以分开设置。 首先,用户可能想知道如何将Text内的文本左对齐显示。在QML中,Text的alignment属性可以设置为Qt.AlignLeft,这样文本会在其所在的矩形区域内左对齐。如果需要同时设置垂直对齐,比如垂直居中,可以用Qt.AlignLeft | Qt.AlignVCenter。 然后,需要考虑Text元素的宽度是否足够。如果Text的宽度没有设置或者太小,可能无法正确显示左对齐的效果,因为文本可能会被截断或者换行。所以可能需要设置Text的width属性,或者让它填满父容器的宽度,这样左对齐才有意义。 另外,用户可能使用的是Qt的某个版本,比如之前的对话中提到了Qt5.6,所以需要确保提到的属性在Qt5.6中是有效的。Qt5.6的QML Text元素确实支持alignment属性,所以没问题。 接下来,需要给出示例代码。比如,一个简单的Text元素,设置alignment为Qt.AlignLeft,并且设置宽度以确保对齐可见。可能还需要设置wrapMode来处理换行,但用户的问题可能只是基本的左对齐,所以可能不需要复杂设置。 然后,需要解释关键点:alignment属性的作用,如何组合水平和垂直对齐方式,以及宽度设置的重要性。可能还要提到如果Text的宽度不足,左对齐可能不明显,或者文本被截断的情况。 最后,根据用户的问题和回答,生成相关的问题。比如,如何同时设置左对齐和垂直居中,Text的alignment在不同父容器中的表现,如何处理多行文本的左对齐,右对齐和居中对齐的设置方法,或者当Text宽度动态变化时对齐方式如何调整等。 </think>在QML中设置`Text`左对齐,关键是通过`alignment`属性指定水平对齐方式为`Qt.AlignLeft`。以下是具体实现方法及注意事项: ### **核心实现** QML的`Text`元素通过`alignment`属性控制文本在其布局区域内的对齐方式。左对齐需将`alignment`设置为`Qt.AlignLeft`(水平左对齐),若需同时指定垂直对齐(如垂直居中),可组合使用`|`运算符(如`Qt.AlignLeft | Qt.AlignVCenter`)。 ### **示例代码** ```qml import QtQuick 2.6 Rectangle { width: 300; height: 100 color: "lightgray" Text { id: leftAlignedText text: "这是左对齐的文本示例" font.pixelSize: 20 color: "black" alignment: Qt.AlignLeft // 关键:设置水平左对齐 width: parent.width // 确保Text宽度与父容器一致,左对齐可见 wrapMode: Text.Wrap // 可选:文本过长时自动换行(需配合width) } } ``` ### **关键说明** 1. **`alignment`属性**: - `Qt.AlignLeft`:水平左对齐(Qt5.6及以上版本支持)。 - 垂直对齐可组合使用`Qt.AlignTop`(上)、`Qt.AlignVCenter`(中)、`Qt.AlignBottom`(下),例如`alignment: Qt.AlignLeft | Qt.AlignVCenter`表示“水平左对齐+垂直居中”。 2. **宽度设置**: `Text`的`width`需足够(如`parent.width`填满父容器),否则左对齐效果可能不明显(文本可能因宽度不足而截断或换行到左侧)。 3. **换行处理**: 若文本过长,可通过`wrapMode: Text.Wrap`启用自动换行(需配合`width`属性),换行后的每行仍保持左对齐。 ### **常见问题示例** 若未设置`width`或`width`过小,可能出现文本右截断或左对齐不生效的情况: ```qml Text { text: "这是一段较长的左对齐文本,宽度不足时会被截断" alignment: Qt.AlignLeft // 未设置width,默认宽度为文本内容宽度,左对齐无意义 } ``` 此时需显式设置`width`(如`width: 200`)或通过`anchors`关联父容器宽度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值