如果您对Android在TextView中设置局部文字的样式和HTML和SpannableString两种方式感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Android在TextView中设
如果您对Android在TextView中设置局部文字的样式和HTML和SpannableString两种方式感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Android在TextView中设置局部文字的样式的各种细节,并对HTML和SpannableString两种方式进行深入的分析,此外还有关于android ExpandableListView中Spinner等抢焦点等组件的处理、Android SpannableString在部分文字后面设置背景、Android Studio 如何在TextView中设置图标并按需调整图标大小、Android TextView中改变部分文字颜色的几种方式的实用技巧。
本文目录一览:- Android在TextView中设置局部文字的样式(HTML和SpannableString两种方式)(android 设置textview内容)
- android ExpandableListView中Spinner等抢焦点等组件的处理
- Android SpannableString在部分文字后面设置背景
- Android Studio 如何在TextView中设置图标并按需调整图标大小
- Android TextView中改变部分文字颜色的几种方式
Android在TextView中设置局部文字的样式(HTML和SpannableString两种方式)(android 设置textview内容)
HTML
private fun setTextStyleWithHtml(tvTest: TextView) {
val text = "Html,测试<u>下划线</u>、<i>斜体字</i>、<font color='red'>红色字</font>的格式"
tvTest.text = Html.fromHtml(text)
}
SpannableString
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE等的作用:
用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。分别有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)。
private fun setTextStyleWithSpan(tvTest: TextView){
//创建一个 SpannableString对象
val msp = SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合")
//设置字体(default,default-bold,monospace,serif,sans-serif)
msp.setSpan(TypefaceSpan("monospace"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(TypefaceSpan("serif"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置字体大小(绝对值,单位:像素)
msp.setSpan(AbsoluteSizeSpan(20), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(AbsoluteSizeSpan(20, true), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
//设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
msp.setSpan(RelativeSizeSpan(0.5f), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //0.5f表示默认字体大小的一半
msp.setSpan(RelativeSizeSpan(2.0f), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //2.0f表示默认字体大小的两倍
//设置字体前景色
msp.setSpan(ForegroundColorSpan(Color.magenta), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //设置前景色为洋红色
//设置字体背景色
msp.setSpan(BackgroundColorSpan(Color.CYAN), 15, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //设置背景色为青色
//设置字体样式正常,粗体,斜体,粗斜体
msp.setSpan(StyleSpan(Typeface.norMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //正常
msp.setSpan(StyleSpan(Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //粗体
msp.setSpan(StyleSpan(Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //斜体
msp.setSpan(StyleSpan(Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //粗斜体
//设置下划线
msp.setSpan(Underlinespan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置删除线
msp.setSpan(StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//设置上下标
msp.setSpan(SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //下标
msp.setSpan(SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //上标
//超级链接(需要添加setMovementMethod方法附加响应)
msp.setSpan(URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //电话
msp.setSpan(ForegroundColorSpan(Color.BLUE), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(URLSpan("mailto:webmaster@google.com"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //邮件
msp.setSpan(ForegroundColorSpan(Color.YELLOW), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(URLSpan("http://www.baidu.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //网络
msp.setSpan(ForegroundColorSpan(Color.GREEN), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //短信 使用sms:或者smsto:
msp.setSpan(ForegroundColorSpan(Color.RED), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //彩信 使用mms:或者mmsto:
msp.setSpan(ForegroundColorSpan(Color.CYAN), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
msp.setSpan(URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //地图
//设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
msp.setSpan(ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
//SpannableString对象设置给TextView
tvTest.text = msp
//设置TextView可点击
tvTest.movementMethod = LinkMovementMethod.getInstance();
}
android ExpandableListView中Spinner等抢焦点等组件的处理
在用到ExpandableListView时,很多情况下会在父视图或者子视图中增加下拉框或者单选框,而往往增加之后会发现父视图不能点击了,即不能展开了,效果将会这样,点击父视图不能展开


怎么办呢?后来发现ExpandableListView有个expandGroup方法,那就可以通过其他事件来调用expandGroup以展开或收缩,ok,知道了原理,下面看代码
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="@null" >
</ExpandableListView>
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity
{
private ExpandableListView expandableListView;
private String[] group_tv = { "未执行", "已执行" };
private String[] spinner = { "08:30-09:30", "09:30-09:30", "09:30-10:30" };
private String[][] child_tv = { { "测试数据", "测试数据", "测试数据", "测试数据" }, { "测试数据", "测试数据", "测试数据", "测试数据" } };
private ArrayAdapter adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, spinner);
expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
expandableListView.setAdapter(new ExpandableListAdapter());
}
class ExpandableListAdapter extends BaseExpandableListAdapter
{
@Override
public int getGroupCount()
{
return group_tv.length;
}
@Override
public int getChildrenCount(int groupPosition)
{
return child_tv[groupPosition].length;
}
@Override
public String getGroup(int groupPosition)
{
return group_tv[groupPosition];
}
@Override
public String getChild(int groupPosition, int childPosition)
{
return child_tv[groupPosition][childPosition];
}
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}
@Override
public boolean hasStableIds()
{
return true;
}
@Override
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, ViewGroup parent)
{
GroupHolder groupHolder = null;
if (convertView == null)
{
groupHolder = new GroupHolder();
convertView = MainActivity.this.getLayoutInflater().from(MainActivity.this).inflate(R.layout.group, null);
groupHolder.groupTv = (TextView) convertView.findViewById(R.id.groupTv);
groupHolder.groupSpinner = (Spinner) convertView.findViewById(R.id.groupSpinner);
convertView.setTag(groupHolder);
} else
{
groupHolder = (GroupHolder) convertView.getTag();
}
((ImageView) convertView.findViewById(R.id.pro_logo)).setImageResource(isExpanded ? R.drawable.hosp_pro_open : R.drawable.hosp_pro_close);
groupHolder.groupTv.setText(group_tv[groupPosition]);
groupHolder.groupSpinner.setAdapter(adapter);
LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.groupExpand);
layout.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (isExpanded)
{
expandableListView.collapseGroup(groupPosition);
} else
{
expandableListView.expandGroup(groupPosition);
}
}
});
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
{
ChildHolder childHolder = null;
if (convertView == null)
{
childHolder = new ChildHolder();
convertView = MainActivity.this.getLayoutInflater().from(MainActivity.this).inflate(R.layout.child, null);
childHolder.childTv = (TextView) convertView.findViewById(R.id.childTv);
childHolder.childSpinner = (Spinner) convertView.findViewById(R.id.childSpinner);
convertView.setTag(childHolder);
} else
{
childHolder = (ChildHolder) convertView.getTag();
}
childHolder.childTv.setText(child_tv[groupPosition][childPosition]);
childHolder.childSpinner.setAdapter(adapter);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}
class GroupHolder
{
TextView groupTv;
Spinner groupSpinner;
}
class ChildHolder
{
TextView childTv;
Spinner childSpinner;
}
}
}
group.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50.0dp"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/groupExpand"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="3"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/pro_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/hosp_pro_close" />
<TextView
android:id="@+id/groupTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="未执行" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical|right"
android:paddingRight="5.0dp" >
<Spinner
android:id="@+id/groupSpinner"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
child.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="30.0dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:id="@+id/childTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="测试数据" />
<Spinner
android:id="@+id/childSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right" />
</LinearLayout>
OK,下面来看看效果
我的博客其它文章列表
http://my.oschina.net/helu
Android SpannableString在部分文字后面设置背景
我想创建类似此图片所示的内容: 在此处输入图片说明
我设法用SpannableStringBuilder创建了Evertyhing,除了橙色的圆角矩形。我可以使用BackgroundColorSpan将背景设置为该颜色,但是我找不到使它变圆的方法。有什么想法可以实现吗?
提前致谢!
编辑:我正在使用Xamarin.Android,但这是我的代码:
stringBuilder.SetSpan(new BackgroundColorSpan(Application.Context.Resources.GetColor(Resource.Color.orangeColor)),stringBuilder.Length() - length,stringBuilder.Length(),SpanTypes.ExclusiveExclusive);
Android Studio 如何在TextView中设置图标并按需调整图标大小
•任务
相信大家对这张图片都不陌生,没错,就是 QQ动态 向我们展示的界面。
如何通过 TextView 实现呢?
•添加文字并放入图标
Android TextView中改变部分文字颜色的几种方式
1. 第一种使用SpannableStringBuilder
//部分文字改变颜色
//ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色
ForegroundColorSpan redSpan = new ForegroundColorSpan(getResources().getColor(R.color.text_red));
ForegroundColorSpan graySpan = new ForegroundColorSpan(getResources().getColor(R.color.text_gray));
mTextView.setText("灰色红色");
//这里注意一定要先给textview赋值
SpannableStringBuilder builder = new SpannableStringBuilder(mTextView.getText().toString());
//为不同位置字符串设置不同颜色
builder.setSpan(graySpan, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(redSpan, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//最后为textview赋值
mTextView.setText(builder);
2. 第二种,使用Html.fromHtml()
TextView desc1 = (TextView)findViewById(R.id.desc1);
TextView desc2 = (TextView)findViewById(R.id.desc2);
TextView desc3 = (TextView)findViewById(R.id.desc3);
String content1 = "务必使用<font color=''red''>银行卡</font>开户时<font color=''red''>预留手机号</font>!";
String content2 = "点击获取验证码按钮后,您将收到<font color=''red''>银行验证码短信</font>!";
String content3 = "时间<font color=''red''>工作日09:00 - 次日06:00</font>!";
desc1.setText(Html.fromHtml(content1));
desc2.setText(Html.fromHtml(content2));
desc3.setText(Html.fromHtml(content3));
3. 总结
1. 使用SpannableStringBuilder由于颜色是在本地定义的,所以可以精确地控制要显示的颜色,兼容性最好。
缺点也很明显太麻烦了,需要为每一种颜色定义一个ForegroundColorSpan
2. 使用Html方式则相对比较简单,直接在字符串里面使用标签即可,但是缺点也相对明显,只能使用标签里面预定义的集中颜色值,与本地兼容性不是很好。
4. 若还有其他方式欢迎指出。
关于Android在TextView中设置局部文字的样式和HTML和SpannableString两种方式的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android ExpandableListView中Spinner等抢焦点等组件的处理、Android SpannableString在部分文字后面设置背景、Android Studio 如何在TextView中设置图标并按需调整图标大小、Android TextView中改变部分文字颜色的几种方式等相关知识的信息别忘了在本站进行查找喔。
本文标签: