Commit aef499f1 authored by 时海鑫's avatar 时海鑫

Merge branch 'dev' into 'master'

test3

See merge request !17
parents 6667a6fe 54f17ca2
package com.tyw.colortest.tools;
import android.graphics.Color;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.graphics.Typeface;
import android.widget.TextView;
import com.tyw.colortest.bean.InfoDataBean;
import java.util.List;
/**
* HTML文本工具类
* 用于将InfoDataBean数据转换为HTML格式并显示在TextView上
*/
public class HtmlTextUtils {
/**
* 将InfoDataBean列表转换为HTML字符串
* @param dataList InfoDataBean列表
* @return HTML格式的字符串
*/
public static String convertToHtml(List<InfoDataBean> dataList) {
if (dataList == null || dataList.isEmpty()) {
return "";
}
StringBuilder htmlBuilder = new StringBuilder();
for (InfoDataBean item : dataList) {
// 开始构建HTML标签
htmlBuilder.append("<font");
// 添加颜色属性
if (item.getColor() != null && !item.getColor().isEmpty()) {
htmlBuilder.append(" color=\"").append(item.getColor()).append("\"");
}
htmlBuilder.append(">");
// 处理字体大小 - 使用big/small标签来模拟大小变化
int bigCount = 0;
int smallCount = 0;
if (item.getSize() > 0) {
if (item.getSize() >= 24) {
// 大字体:使用多个big标签
bigCount = Math.min(3, (item.getSize() - 16) / 8); // 最多3个big标签
} else if (item.getSize() <= 12) {
// 小字体:使用small标签
smallCount = Math.min(2, (16 - item.getSize()) / 4); // 最多2个small标签
}
}
// 添加big标签
for (int i = 0; i < bigCount; i++) {
htmlBuilder.append("<big>");
}
// 添加small标签
for (int i = 0; i < smallCount; i++) {
htmlBuilder.append("<small>");
}
// 如果需要加粗,添加<b>标签
if (item.isBold()) {
htmlBuilder.append("<b>");
}
// 添加文本内容,处理换行符
String text = item.getText();
if (text != null) {
// 将\n转换为<br>
text = text.replace("\n", "<br>");
htmlBuilder.append(text);
}
// 关闭加粗标签
if (item.isBold()) {
htmlBuilder.append("</b>");
}
// 关闭small标签
for (int i = 0; i < smallCount; i++) {
htmlBuilder.append("</small>");
}
// 关闭big标签
for (int i = 0; i < bigCount; i++) {
htmlBuilder.append("</big>");
}
// 关闭font标签
htmlBuilder.append("</font>");
}
return htmlBuilder.toString();
}
/**
* 将InfoDataBean列表转换为SpannableStringBuilder(更精确的样式控制)
* @param dataList InfoDataBean列表
* @return SpannableStringBuilder对象
*/
public static SpannableStringBuilder convertToSpannable(List<InfoDataBean> dataList) {
SpannableStringBuilder builder = new SpannableStringBuilder();
if (dataList == null || dataList.isEmpty()) {
return builder;
}
for (InfoDataBean item : dataList) {
String text = item.getText();
if (text == null) {
continue;
}
int start = builder.length();
builder.append(text);
int end = builder.length();
// 设置颜色
if (item.getColor() != null && !item.getColor().isEmpty()) {
try {
int color = Color.parseColor(item.getColor());
builder.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (IllegalArgumentException e) {
// 颜色解析失败,忽略
}
}
// 设置字体大小
if (item.getSize() > 0) {
builder.setSpan(new AbsoluteSizeSpan(item.getSize(), true), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
// 设置加粗
if (item.isBold()) {
builder.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return builder;
}
/**
* 将InfoDataBean列表转换为更现代的HTML字符串(使用span标签和CSS样式)
* @param dataList InfoDataBean列表
* @return HTML格式的字符串
*/
public static String convertToModernHtml(List<InfoDataBean> dataList) {
if (dataList == null || dataList.isEmpty()) {
return "";
}
StringBuilder htmlBuilder = new StringBuilder();
for (InfoDataBean item : dataList) {
// 使用span标签和style属性
htmlBuilder.append("<span style=\"");
// 添加颜色样式
if (item.getColor() != null && !item.getColor().isEmpty()) {
htmlBuilder.append("color:").append(item.getColor()).append(";");
}
// 添加字体大小样式
if (item.getSize() > 0) {
htmlBuilder.append("font-size:").append(item.getSize()).append("px;");
}
// 添加加粗样式
if (item.isBold()) {
htmlBuilder.append("font-weight:bold;");
}
htmlBuilder.append("\">");
// 添加文本内容,处理换行符
String text = item.getText();
if (text != null) {
// 将\n转换为<br>
text = text.replace("\n", "<br>");
htmlBuilder.append(text);
}
htmlBuilder.append("</span>");
}
return htmlBuilder.toString();
}
/**
* 直接将JSON字符串解析并设置到TextView
* @param textView 目标TextView
* @param jsonString JSON字符串
*/
public static void setJsonToTextView(TextView textView, String jsonString) {
try {
List<InfoDataBean> dataList = InfoDataBean.parseFromJson(jsonString);
setDataToTextView(textView, dataList);
} catch (Exception e) {
e.printStackTrace();
textView.setText("JSON解析失败: " + e.getMessage());
}
}
/**
* 将InfoDataBean列表设置到TextView(使用SpannableStringBuilder,样式更精确)
* @param textView 目标TextView
* @param dataList InfoDataBean列表
*/
public static void setDataToTextView(TextView textView, List<InfoDataBean> dataList) {
if (textView == null) {
return;
}
if (dataList == null || dataList.isEmpty()) {
textView.setText("");
return;
}
// 使用SpannableStringBuilder来获得更精确的样式控制
SpannableStringBuilder spannableText = convertToSpannable(dataList);
textView.setText(spannableText);
}
/**
* 将InfoDataBean列表设置到TextView(使用HTML方式)
* @param textView 目标TextView
* @param dataList InfoDataBean列表
*/
public static void setDataToTextViewWithHtml(TextView textView, List<InfoDataBean> dataList) {
if (textView == null) {
return;
}
if (dataList == null || dataList.isEmpty()) {
textView.setText("");
return;
}
// 转换为HTML并设置到TextView
String htmlText = convertToHtml(dataList);
// 使用Html.fromHtml()将HTML字符串转换为Spanned对象
Spanned spannedText;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
spannedText = Html.fromHtml(htmlText, Html.FROM_HTML_MODE_LEGACY);
} else {
spannedText = Html.fromHtml(htmlText);
}
textView.setText(spannedText);
}
/**
* 示例:解析你提供的JSON并显示到TextView
* @param textView 目标TextView
*/
public static void showExampleInTextView(TextView textView) {
String jsonData = "[\n" +
" {\n" +
" \"text\": \"行人匆忙脚步,\",\n" +
" \"color\": \"#33aaff\",\n" +
" \"size\": 20,\n" +
" \"bold\": true\n" +
" },\n" +
" {\n" +
" \"text\": \"霓虹倒影闪烁。\\n\",\n" +
" \"color\": \"#ffbb33\",\n" +
" \"size\": 23,\n" +
" \"bold\": false\n" +
" }\n" +
"]";
setJsonToTextView(textView, jsonData);
}
}
\ No newline at end of file
package com.tyw.colortest.tools;
import android.widget.TextView;
import com.tyw.colortest.bean.InfoDataBean;
import java.util.List;
/**
* JSON解析使用示例
* 展示如何将JSON数据解析并显示到TextView上
*/
public class JsonParseExample {
/**
* 示例:解析你提供的JSON数据并显示到TextView
* @param textView 目标TextView
*/
public static void parseAndShowExample(TextView textView) {
// 你提供的JSON数据
String jsonData = "[\n" +
" {\n" +
" \"text\": \"行人匆忙脚步,\",\n" +
" \"color\": \"#33aaff\",\n" +
" \"size\": 20,\n" +
" \"bold\": true\n" +
" },\n" +
" {\n" +
" \"text\": \"霓虹倒影闪烁。\\n\",\n" +
" \"color\": \"#ffbb33\",\n" +
" \"size\": 23,\n" +
" \"bold\": false\n" +
" }\n" +
"]";
// 直接将JSON解析并设置到TextView
HtmlTextUtils.setJsonToTextView(textView, jsonData);
}
/**
* 示例:解析JSON数据(控制台输出)
*/
public static void parseExample() {
// 你提供的JSON数据
String jsonData = "[\n" +
" {\n" +
" \"text\": \"行人匆忙脚步,\",\n" +
" \"color\": \"#33aaff\",\n" +
" \"size\": 20,\n" +
" \"bold\": true\n" +
" },\n" +
" {\n" +
" \"text\": \"霓虹倒影闪烁。\\n\",\n" +
" \"color\": \"#ffbb33\",\n" +
" \"size\": 23,\n" +
" \"bold\": false\n" +
" }\n" +
"]";
// 解析JSON数据
List<InfoDataBean> dataList = InfoDataBean.parseFromJson(jsonData);
// 使用解析后的数据
if (dataList != null) {
for (InfoDataBean item : dataList) {
System.out.println("文本: " + item.getText());
System.out.println("颜色: " + item.getColor());
System.out.println("大小: " + item.getSize());
System.out.println("加粗: " + item.isBold());
System.out.println("---");
}
// 转换为HTML并输出
String html = HtmlTextUtils.convertToHtml(dataList);
System.out.println("生成的HTML: " + html);
}
}
/**
* 创建数据并转换为JSON的示例
*/
public static String createJsonExample() {
// 创建InfoDataBean对象
InfoDataBean item1 = new InfoDataBean("行人匆忙脚步,", "#33aaff", 20, true);
InfoDataBean item2 = new InfoDataBean("霓虹倒影闪烁。\n", "#ffbb33", 23, false);
// 转换为JSON
java.util.List<InfoDataBean> list = java.util.Arrays.asList(item1, item2);
return InfoDataBean.toJson(list);
}
/**
* 完整的使用示例:从JSON到TextView显示
* @param textView 目标TextView
* @param jsonString 要解析的JSON字符串
*/
public static void fullExample(TextView textView, String jsonString) {
try {
// 1. 解析JSON
List<InfoDataBean> dataList = InfoDataBean.parseFromJson(jsonString);
// 2. 转换为HTML
String htmlText = HtmlTextUtils.convertToHtml(dataList);
System.out.println("生成的HTML: " + htmlText);
// 3. 设置到TextView
HtmlTextUtils.setDataToTextView(textView, dataList);
} catch (Exception e) {
e.printStackTrace();
textView.setText("解析失败: " + e.getMessage());
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment