gpt4 book ai didi

Android-使用 html 数据从 textview 获取文本位置

转载 作者:行者123 更新时间:2023-11-30 01:25:44 24 4
gpt4 key购买 nike

我已将 html 数据设置到我的 TextView 中。当我从 TextView 中选择任何单词/字符时,我想将该单词加粗并用新的替换原始 html 数据。

String html = "<p>hello this is android testing</p>";

像这样,我的 html 中可能有很多 html 标签。如果我想让“android”这个词加粗,我该如何用“android”替换原来的 html 字符串。

我要<p>hello this is <strong>android</strong> testing</p>结果。

最佳答案

您可以先将您的字符串内容设置到TextView中然后使用 setCustomSelectionActionModeCallback(...)拦截 TextView 中的选择。

在下面的示例中,选定的单词将被 <strong>...</strong> 包围.

例如,选择“testing”将使以下字符串在 TextView 中可见。

hello this is android testing android bla bla android bla bla android bla

然后在已经转换的 TextView 内容中选择“android”上的最后一个实例将使以下字符串在 TextVIew 中可见。

hello this is android testing android bla bla android bla bla android bla

代码:

public class MainActivity extends AppCompatActivity {

String yourString = "<p>hello this is android testing android bla bla android bla bla android bla</p>";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView tv = (TextView)findViewById(R.id.opening_today);
tv.setText(Html.fromHtml(yourString));
tv.setCustomSelectionActionModeCallback(new CallbackListener(tv));
}

class CallbackListener implements ActionMode.Callback{

private TextView tv;
private String strongS = "<strong>";
private String strongE = "</strong>";

public CallbackListener(TextView tv) {
this.tv = tv;
}

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
int start = tv.getSelectionStart();
int end = tv.getSelectionEnd();

if( start == 0 && end == 0)
return false;

String content = tv.getText().toString();
String token = content.substring(start, end);
String before = content.substring(0, start);
String after = content.substring(end, content.length());
content = makeItStrong(before, after, token);
tv.setText(Html.fromHtml(content));
return false;
}

private String makeItStrong(String before, String after, String token){
return cleanTags(before, strongS, strongE) + strongS + token + strongE + cleanTags(after, strongS, strongE);
}

private String cleanTags(String source, String... exp){
for(String s: exp){
source = source.replace(s, "");
}
return source;
}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return true; }

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; }

@Override
public void onDestroyActionMode(ActionMode mode) {}
}
}

关于Android-使用 html 数据从 textview 获取文本位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com