Android开发 TextView的开发记录
<h1><span style="color: rgba(0, 128, 128, 1)">版权声明</span></h1><p>本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11061514.html</p>
<div>本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。</div>
<h1><span style="color: rgba(0, 128, 128, 1)">前言</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)"> 此篇博客是记录一些TextView开发上一些少用的开发功能项.目前开发记录如下:</span></p>
<ul>
<li><span style="color: rgba(0, 0, 0, 1)"> 添加图片</span></li>
<li><span style="color: rgba(0, 0, 0, 1)"> 文字滚动</span></li>
<li> 添加省略号</li>
<li> 实现长文的收起和展开功能</li>
<li><span style="color: rgba(0, 0, 0, 1)"> 改变一个字符串里自定字符的颜色或者大小</span></li>
</ul>
<h1><span style="color: rgba(0, 128, 128, 1)">效果字体(<strong>粗体</strong>/<em>斜体</em>/<span style="text-decoration: underline">下划线</span>)</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">增加效果字体的方法有很多既可以在xml属性里设置,又可以在代码里设置.(这里我们除了不演示使用SpannableString实现方式,都会演示一下)</span></p>
<h3><span style="color: rgba(0, 0, 0, 1)">xml里设置粗体</span></h3>
<p><span style="color: rgba(0, 0, 0, 1)">android:textStyle="bold"</span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/html5_test"</span><span style="color: rgba(255, 0, 0, 1)">
android:gravity</span><span style="color: rgba(0, 0, 255, 1)">="start"</span><span style="color: rgba(255, 0, 0, 1)">
android:text</span><span style="color: rgba(0, 0, 255, 1)">="测试文本"</span><span style="color: rgba(255, 0, 0, 1)">
android:textSize</span><span style="color: rgba(0, 0, 255, 1)">="17sp"</span><span style="color: rgba(255, 0, 0, 1)">
android:textStyle</span><span style="color: rgba(0, 0, 255, 1)">="bold"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="200dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="50dp"</span> <span style="color: rgba(0, 0, 255, 1)">/></span></pre>
</div>
<h3>xml里设置斜体</h3>
<p><span style="color: rgba(0, 0, 0, 1)">android:textStyle="italic"</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/html5_test"</span><span style="color: rgba(255, 0, 0, 1)">
android:gravity</span><span style="color: rgba(0, 0, 255, 1)">="start"</span><span style="color: rgba(255, 0, 0, 1)">
android:text</span><span style="color: rgba(0, 0, 255, 1)">="测试文本"</span><span style="color: rgba(255, 0, 0, 1)">
android:textSize</span><span style="color: rgba(0, 0, 255, 1)">="17sp"</span><span style="color: rgba(255, 0, 0, 1)">
android:textStyle</span><span style="color: rgba(0, 0, 255, 1)">="italic"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="200dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="50dp"</span> <span style="color: rgba(0, 0, 255, 1)">/></span></pre>
</div>
<h3>代码里实现粗体/斜体/下划线/中划线</h3>
<p>这是实现方式其实就是获取TextView绘制文字的<span style="color: rgba(0, 0, 0, 1)">paint</span>,通过改变<span style="color: rgba(0, 0, 0, 1)">paint</span>的配置.达到改变文字效果</p>
<p><strong>粗体</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> TextView textView = findViewById(R.id.text_view);
TextPaint paint = textView.getPaint();
paint.setFakeBoldText(true);</span></pre>
</div>
<p><span style="color: rgba(0, 0, 0, 1)"><strong>下划线/中划线</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">textView1.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//中划线
textView1.getPaint().setAntiAlias(true); //去掉锯齿
textView2.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下划线</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">添加图片</span></h1>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">TextView 放入图片例子</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:drawableTop="@drawable/icon1"在文字上面放入图片</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:drawablePadding="20dp"设置图片与文字之间的间隔</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:text</span><span style="color: rgba(0, 0, 255, 1)">="努力学习"</span><span style="color: rgba(255, 0, 0, 1)">
android:textColor</span><span style="color: rgba(0, 0, 255, 1)">="#0000ff"</span><span style="color: rgba(255, 0, 0, 1)">
android:textSize</span><span style="color: rgba(0, 0, 255, 1)">="50sp"</span><span style="color: rgba(255, 0, 0, 1)">
android:drawableTop</span><span style="color: rgba(0, 0, 255, 1)">="@drawable/icon1"</span><span style="color: rgba(255, 0, 0, 1)">
android:drawablePadding</span><span style="color: rgba(0, 0, 255, 1)">="20dp"</span><span style="color: rgba(0, 0, 255, 1)">/></span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">代码里添加图片</span></h1>
<div class="cnblogs_code">
<pre> Drawable drawable =<span style="color: rgba(0, 0, 0, 1)"> context.getDrawable(R.drawable.ic_selection);
drawable.setBounds(</span><span style="color: rgba(128, 0, 128, 1)">0</span>,<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,drawable.getMinimumWidth(),drawable.getMinimumHeight());
itemName.setCompoundDrawables(</span><span style="color: rgba(0, 0, 255, 1)">null</span>, <span style="color: rgba(0, 0, 255, 1)">null</span>, drawable, <span style="color: rgba(0, 0, 255, 1)">null</span>);</pre>
</div>
<p>这里说明一下<span style="color: rgba(0, 0, 0, 1)">getDrawable</span>的Drawable是没有大小尺寸的需要自己重新设定。如果不明白参考:https://www.cnblogs.com/guanxinjing/p/11249427.html</p>
<h1><span style="color: rgba(0, 128, 128, 1)">文字滚动播放</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">设置有滚动播放效果的文字显示</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:singleLine="true"设置单行</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:marqueeRepeatLimit="marquee_forever"设置滚动次数,这里为永久滚动</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:ellipsize="marquee"ellipsize意思省略位置,marquee的意思是滚动模式</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:focusable="true"意思可聚焦,被选中。只有聚焦的文字才会滚动</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">android:focusableInTouchMode="true" 可调焦的触摸模式</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">注意此方法设置文字滚动,一个页面只有一段文字可以被预设聚焦并且滚动</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:text</span><span style="color: rgba(0, 0, 255, 1)">="@string/main4Text1"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_marginTop</span><span style="color: rgba(0, 0, 255, 1)">="30dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:singleLine</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
android:ellipsize</span><span style="color: rgba(0, 0, 255, 1)">="marquee"</span><span style="color: rgba(255, 0, 0, 1)">
android:marqueeRepeatLimit</span><span style="color: rgba(0, 0, 255, 1)">="marquee_forever"</span><span style="color: rgba(255, 0, 0, 1)">
android:focusable</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
android:focusableInTouchMode</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(0, 0, 255, 1)">/></span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">添加省略号</span></h1>
<div class="cnblogs_code">
<pre>android:maxLines="2"<span style="color: rgba(0, 0, 0, 1)">
android:ellipsize</span>="end"</pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">获取光标框选文本的位置</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">int</span> start =<span style="color: rgba(0, 0, 0, 1)"> mTextView.getSelectionStart();
</span><span style="color: rgba(0, 0, 255, 1)">int</span> end = mTextView.getSelectionEnd();</pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">实现长文的收起和展开功能</span></h1>
<h4>关键一 在TextView里面的getLayout方法</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* Gets the {</span><span style="color: rgba(128, 128, 128, 1)">@link</span><span style="color: rgba(0, 128, 0, 1)"> android.text.Layout} that is currently being used to display the text.
* This value can be null if the text or width has recently changed.
* </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> The Layout that is currently being used to display the text.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> Layout getLayout() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> mLayout;
}</span></pre>
</div>
<h4>关键二 在Layout里的getEllipsisCount方法</h4>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* Returns the number of characters to be ellipsized away, or 0 if
* no ellipsis is to take place.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">abstract</span> <span style="color: rgba(0, 0, 255, 1)">int</span> getEllipsisCount(<span style="color: rgba(0, 0, 255, 1)">int</span> line);</pre>
</div>
<h4>使用方式</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取省略的字符数,0表示没省略</span>
<span style="color: rgba(0, 0, 255, 1)">int</span> ellipsisCountholder = textView.getLayout().getEllipsisCount(holder.content.getLineCount()-1);</pre>
</div>
<h4>注意,TextView还在初始化的时候getLayout()可能会返回null,所以需要在TextView初始化测绘完成后获取.如下:</h4>
<div class="cnblogs_code">
<pre>holder.content.post(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Runnable() {
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> run() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取省略的字符数,0表示没和省略</span>
<span style="color: rgba(0, 0, 255, 1)">int</span> ellipsisCountholder = holder.content.getLayout().getEllipsisCount(holder.content.getLineCount()-1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (ellipsisCountholder != 0<span style="color: rgba(0, 0, 0, 1)">){
holder.telescopicContent.setText(</span>"全文"<span style="color: rgba(0, 0, 0, 1)">);
holder.telescopicContent.setVisibility(View.VISIBLE);
}
}
});</span></pre>
</div>
<h4>去上面的代码配合,实现TextView的收起与展开</h4>
<div class="cnblogs_code">
<pre>viewHolder.telescopicContent.setOnClickListener(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> View.OnClickListener() {
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onClick(View v) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (viewHolder.telescopicContent.getText().equals("全文"<span style="color: rgba(0, 0, 0, 1)">)){
viewHolder.telescopicContent.setText(</span>"收起"<span style="color: rgba(0, 0, 0, 1)">);
viewHolder.content.setMaxLines(</span>50<span style="color: rgba(0, 0, 0, 1)">);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
viewHolder.telescopicContent.setText(</span>"全文"<span style="color: rgba(0, 0, 0, 1)">);
viewHolder.content.setMaxLines(</span>4<span style="color: rgba(0, 0, 0, 1)">);
}
}
});</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">改变一个字符串里自定字符的颜色或者大小</span></h1>
<div class="cnblogs_code">
<pre> SpannableString spannableString = <span style="color: rgba(0, 0, 255, 1)">new</span> SpannableString("今天天气不错"<span style="color: rgba(0, 0, 0, 1)">);
spannableString.setSpan(</span><span style="color: rgba(0, 0, 255, 1)">new</span> ForegroundColorSpan(Color.parseColor("#FF0000")), 2<span style="color: rgba(0, 0, 0, 1)">, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv5.setText(spannableString);</span></pre>
</div>
<p>setSpan方法有四个参数,</p>
<p>第一个参数:ForegroundColorSpan是为文本设置前景色,也就是文字颜色。如果要为文字添加背景颜色,可替换为<strong>BackgroundColorSpan。</strong></p>
<p>第二个参数:文本颜色改变的起始位置</p>
<p>第三个参数:文本颜色改变的结束位置。</p>
<p>最后一个参数为布尔型,可以传入以下四种:</p>
<ul>
<li>Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终止下标,包括起始下标</li>
<li>Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终止下标,同时包括起始下标和终止下标</li>
<li>Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终止下标,但都不包括起始下标和终止下标</li>
<li>Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终止下标,包括终止下标</li>
</ul>
<h1><span style="color: rgba(0, 128, 128, 1)">文字间距</span></h1>
<h3><span style="color: rgba(0, 0, 0, 1)">设置文字之间的间距</span></h3>
<div class="cnblogs_code">
<pre>android:letterSpacing="0.5"</pre>
</div>
<h3><span style="color: rgba(0, 0, 0, 1)">设置行间距</span></h3>
<div class="cnblogs_code">
<pre>android:lineSpacingExtra="10dp"</pre>
</div>
<h3>设置行间距倍数</h3>
<div class="cnblogs_code">
<pre>android:lineSpacingMultiplier="0.5"</pre>
</div>
<h1><span style="background-color: rgba(255, 255, 255, 1); color: rgba(0, 128, 128, 1)">字体阴影效果</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)"><strong><span style="background-color: rgba(255, 255, 255, 1)">水平阴影偏移量</span></strong></span></p>
<div class="cnblogs_code">
<pre>android:shadowDx="1" </pre>
</div>
<p><span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">垂直阴影偏移量</span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre>android:shadowDy="1" </pre>
</div>
<p><span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">阴影颜色</span></span></span></span></span></p>
<div class="cnblogs_code">
<pre>android:shadowColor="#8c8c8c" </pre>
</div>
<p><span style="color: rgba(102, 14, 122, 1); font-weight: bold"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">阴影范围</span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre>android:shadowRadius="5"</pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">文字颜色点击/选中后改变</span></h1>
<p>在res创建color目录,在目录下面创建如下文件:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202003/1497956-20200327114107225-851027208.png" alt=""></p>
<p> </p>
<p>selected_text_color.xml</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">selector </span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:state_focused</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> android:color</span><span style="color: rgba(0, 0, 255, 1)">="@color/color_text_yellow"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:state_checked</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> android:color</span><span style="color: rgba(0, 0, 255, 1)">="@color/color_text_yellow"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:state_pressed</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> android:color</span><span style="color: rgba(0, 0, 255, 1)">="@color/color_text_yellow"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:state_selected</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> android:color</span><span style="color: rgba(0, 0, 255, 1)">="@color/color_text_yellow"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:color</span><span style="color: rgba(0, 0, 255, 1)">="@color/color_55"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">selector</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>在TextView里使用它</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/name"</span><span style="color: rgba(255, 0, 0, 1)">
android:text</span><span style="color: rgba(0, 0, 255, 1)">="name"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:textColor</span><span style="color: rgba(0, 0, 255, 1)">="@color/selected_text_color"</span><span style="color: rgba(0, 0, 255, 1)">/></span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">设置TextView可以上下滑动内容</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)"> 在设置一些文字内容超出,但是又需要固定高度的时候。我们可以让TextView实现滑动功能起来。</span></p>
<p>在xml里添加一下2个属性:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">android:scrollbars="vertical"
android:fadeScrollbars="false"</span></pre>
</div>
<p>在代码里设置:</p>
<div class="cnblogs_code">
<pre>mTextView.setMovementMethod(ScrollingMovementMethod.getInstance());</pre>
</div>
<p>如果想自定义滚动条,接着在xml里面加入属性:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">android:scrollbarThumbVertical="@drawable/ic_launcher" //滑块的图片
android:scrollbarTrackVertical="@drawable/ic_launcher" //滑道的图片 </span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">根据TextView尺寸改变文字的大小</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">注意,以下属性是Android8.0支持的,低于8.0使用app:兼容属性比如: <code class="language-xml"><span class="token tag"><span class="token attr-name"><span class="token namespace">app:autoSizeTextType<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"uniform<span class="token punctuation">"。 <br></span></span></span></span></span></span></span></code></span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><span class="token tag"><span class="token attr-name"><span class="token namespace"><span class="token attr-value"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span style="color: rgba(0, 0, 0, 1)">另外,下面这些属性在Button上也支持的。</span></span></span></span></span></span></span></span></span></p>
<h2><span style="color: rgba(0, 0, 0, 1)">开关自动改变字体大小</span></h2>
<p><span style="color: rgba(0, 0, 0, 1)">有2个属性 none 与 uniform, </span><span style="color: rgba(0, 0, 0, 1)">uniform为开启,开启后文字会尽可能的填充满TextView所有空白的空间。</span></p>
<p> </p>
<div class="cnblogs_code">
<pre> android:autoSizeTextType="uniform"</pre>
</div>
<h2>设置自动改变字体大小的最大值与最小值</h2>
<p>当TextView尺寸改变后,文字也会自动改变大小。但是只能在这两个限制属性之间</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> android:autoSizeMaxTextSize="60sp"
android:autoSizeMinTextSize="10sp"</span></pre>
</div>
<h2>设置每次自动改变字体大小的步值</h2>
<p>当TextView尺寸改变后,文字也会自动改变大小。但是,每次改变增大或者减小会不规则,你可以使用下面这个属性限定每次增大与减小的值。如下属性每次变化只会以5sp</p>
<div class="cnblogs_code">
<pre> android:autoSizeStepGranularity="5sp"</pre>
</div>
<h2 id="25-预设尺寸范围">预设尺寸范围</h2>
<p>设置了 Autosizeing 的粒度,就可以在这个范围内,根据我们设置的粒度进行缩放。通常,使用粒度来控制基本上可以达到我们的要求,但是如果对缩放有更精准的要求,例如: 这样的缩放,使用粒度就达不到我们的要求了。</p>
<p>预设尺寸可以接受一个尺寸数组,Autosizeing 就会从我们设定的尺寸数组中,取一个尺寸进行设置。同时你可以为这些尺寸设置一个统一的尺寸单位。</p>
<p>如果想要在 layout-xml 使用属性的形式使用预设尺寸,你首先需要一个 array 的资源,然后通过 <code>autoSizePresetSizes</code> 属性进行设置即可。</p>
<p>array 资源的格式:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">resources</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">array </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="autosize_text_sizes"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>10sp<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>12sp<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>20sp<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>40sp<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>100sp<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">array</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">resources</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>定义好 array 的尺寸资源之后,就可以在 layout-xml 中使用它。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><?</span><span style="color: rgba(255, 0, 255, 1)">xml version="1.0" encoding="utf-8"</span><span style="color: rgba(0, 0, 255, 1)">?></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">LinearLayout
</span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(255, 0, 0, 1)">
xmlns:app</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res-auto"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="200dp"</span><span style="color: rgba(255, 0, 0, 1)">
app:autoSizeTextType</span><span style="color: rgba(0, 0, 255, 1)">="uniform"</span><span style="color: rgba(255, 0, 0, 1)">
app:autoSizePresetSizes</span><span style="color: rgba(0, 0, 255, 1)">="@array/autosize_text_sizes"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">LinearLayout</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">设置TextView的文字颜色为渐变色</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> fun initView() {
val linearGradient </span>=<span style="color: rgba(0, 0, 0, 1)"> LinearGradient(400f, 100f, 0f, 100f, resources.getColor(R.color.know_color_1DBBFF), resources.getColor(R.color.know_color_48F3D0), Shader.TileMode.CLAMP)
textView.paint.shader </span>=<span style="color: rgba(0, 0, 0, 1)"> linearGradient
}</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">修改字体</span></h1>
<p><strong>Android自带的字体</strong></p>
<div class="cnblogs_code">
<pre>android:fontFamily="sans-serif-medium"</pre>
</div>
<p><strong>自定义字体</strong></p>
<p><strong>方式一 导入res中的font文件夹(需要Android8.0 api 26 支持)</strong></p>
<p>此方法也支持TextClock 时间显示View的字体修改 (TextClock 下面的方式二无法修改字体)</p>
<p><strong><img src="https://img2022.cnblogs.com/blog/1497956/202203/1497956-20220324103618367-1730350851.png" alt=""></strong></p>
<p> </p>
<p> <img src="https://img2022.cnblogs.com/blog/1497956/202203/1497956-20220324103636015-674671927.png" alt=""></p>
<p><strong>方式二 从assets导入字体</strong></p>
<p>导入字体</p>
<p><strong><img src="https://img2022.cnblogs.com/blog/1497956/202203/1497956-20220324102306374-33723225.png" alt=""></strong></p>
<p> 代码</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> fun initFonts(){
val tf </span>= Typeface.createFromAsset(assets, "mainfonts/Nunito_Black.ttf"<span style="color: rgba(0, 0, 0, 1)">)
mBinding.time.typeface </span>=<span style="color: rgba(0, 0, 0, 1)"> tf
}</span></pre>
</div>
<p><strong>全局字体修改</strong></p>
<p>代码</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> initFont(){
Typeface typeface </span>= Typeface.createFromAsset(getAssets(), "fonts/PingFang_Regular.ttf"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
Field field </span>= Typeface.<span style="color: rgba(0, 0, 255, 1)">class</span>.getDeclaredField("MONOSPACE"<span style="color: rgba(0, 0, 0, 1)">);
field.setAccessible(</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
field.set(</span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, typeface);
} </span><span style="color: rgba(0, 0, 255, 1)">catch</span> (NoSuchFieldException |<span style="color: rgba(0, 0, 0, 1)"> IllegalAccessException e) {
e.printStackTrace();
}
}</span></pre>
</div>
<p>全局主题 添加 <item name="android:typeface">monospace</item></p>
<div class="cnblogs_code">
<pre> <style name="Theme.DevApp" parent="Theme.AppCompat.NoActionBar">
<item name="windowNoTitle"><span style="color: rgba(0, 0, 255, 1)">true</span></item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:windowBackground">@android:color/white</item>
<item name="android:windowFullscreen"><span style="color: rgba(0, 0, 255, 1)">true</span></item>
<item name="android:windowContentOverlay">@<span style="color: rgba(0, 0, 255, 1)">null</span></item>
<item name="colorControlNormal">@android:color/white</item>
<item name="colorControlActivated">@android:color/white</item>
<item name="android:typeface">monospace</item>
</style></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">去掉上下自带内边距</span></h1>
<div class="cnblogs_code">
<pre> android:includeFontPadding="false"</pre>
</div>
<pre class="highlighter-hljs" data-dark-theme="true"><code> </code></pre>
<p>END</p>
<pre class="highlighter-hljs" data-dark-theme="true"><code> </code></pre>
</div>
<div id="MySignature" role="contentinfo">
<div style="text-align: center">
<p style="color:orange;font-size:16px;" >本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11061514.html </p>
<div style="color:orange;font-size:16px;">本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 </div>
</div><br><br>
来源:https://www.cnblogs.com/guanxinjing/p/11061514.html
頁:
[1]