注释了创建上下文菜单,特别是处理URL链接

pull/27/head
gq 3 months ago
parent fa0d2533ce
commit 07105431f7

@ -214,7 +214,7 @@ public class NoteEditText extends EditText {
// 未被处理的按键事件交由父类处理 // 未被处理的按键事件交由父类处理
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }
@Override @Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if (mOnTextViewChangeListener != null) { if (mOnTextViewChangeListener != null) {
@ -227,39 +227,57 @@ public class NoteEditText extends EditText {
super.onFocusChanged(focused, direction, previouslyFocusedRect); super.onFocusChanged(focused, direction, previouslyFocusedRect);
} }
/**
*
* URL
*/
@Override @Override
protected void onCreateContextMenu(ContextMenu menu) { protected void onCreateContextMenu(ContextMenu menu) {
// 检查当前文本是否包含富文本样式(如超链接)
if (getText() instanceof Spanned) { if (getText() instanceof Spanned) {
// 获取当前选中的文本范围
int selStart = getSelectionStart(); int selStart = getSelectionStart();
int selEnd = getSelectionEnd(); int selEnd = getSelectionEnd();
// 确保起始和结束位置正确排序
int min = Math.min(selStart, selEnd); int min = Math.min(selStart, selEnd);
int max = Math.max(selStart, selEnd); int max = Math.max(selStart, selEnd);
// 从选中文本中提取URLSpan对象超链接
final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class); final URLSpan[] urls = ((Spanned) getText()).getSpans(min, max, URLSpan.class);
// 如果只选中了一个URL链接
if (urls.length == 1) { if (urls.length == 1) {
int defaultResId = 0; int defaultResId = 0; // 默认菜单项资源ID
for(String schema: sSchemaActionResMap.keySet()) {
// 遍历预定义的URL协议映射表
for(String schema : sSchemaActionResMap.keySet()) {
// 检查当前URL是否包含特定协议如http, mailto等
if(urls[0].getURL().indexOf(schema) >= 0) { if(urls[0].getURL().indexOf(schema) >= 0) {
// 获取对应的菜单项文本资源ID
defaultResId = sSchemaActionResMap.get(schema); defaultResId = sSchemaActionResMap.get(schema);
break; break;
} }
} }
// 如果没有匹配的协议,使用默认"其他链接"菜单项
if (defaultResId == 0) { if (defaultResId == 0) {
defaultResId = R.string.note_link_other; defaultResId = R.string.note_link_other;
} }
// 添加菜单项并设置点击监听器
menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener( menu.add(0, 0, 0, defaultResId).setOnMenuItemClickListener(
new OnMenuItemClickListener() { new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
// goto a new intent // 当菜单项被点击时触发URL链接的默认行为
// 比如打开浏览器或邮件客户端
urls[0].onClick(NoteEditText.this); urls[0].onClick(NoteEditText.this);
return true; return true; // 表示事件已处理
} }
}); });
} }
} }
// 调用父类方法继续处理其他上下文菜单逻辑
super.onCreateContextMenu(menu); super.onCreateContextMenu(menu);
} }
}

Loading…
Cancel
Save