- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 Android 应用程序中有一个 EditText
View 。我需要其中的“内部链接”,这意味着我需要一些按钮或 EditText
内的 span 并使用 onClick
到此按钮我可以执行一些操作(不重定向到网络页)。我用这样的 ClickableSpan()
实现了这个按钮
linkWord = "my link";
link = new SpannableString(linkWord);
cs = new ClickableSpan(){
private String w = linkWord;
@Override
public void onClick(View widget) {
wrd.setText(w);
}
};
link.setSpan(cs, 0, linkWord.length(), 0);
et.append(link);
为了使这个跨度可点击,我使用了
et.setMovementMethod(LinkMovementMethod.getInstance());
“内部链接”工作正常,但在使用 et.setMovementMethod()
后,复制和粘贴项目在 OnLongClick
菜单上被禁用。这是一个问题,因为我需要 EditText
中的“链接”并同时从该 View 复制文本。
我想在监听器 OnLongClickListener
中设置类似 removeMovementMethod()
的东西,用于临时禁用“链接”功能,并使用带有复制/粘贴功能的菜单,并在复制文本后打开setMovementMethod()
方法。但我不知道如何实现这一点。
你能帮帮我吗?您可能还有其他一些方法...
谢谢!
最佳答案
我认为让用户在链接和复制模式之间切换不会为您赢得可用性奖。我的解决方案允许您同时选择文本和打开链接。为实现这一点,我只需扩展 ArrowKeyMovementMethod,它允许选择文本,并从 LinkMovementMethod 添加 onTouchEvent() 方法,它处理链接的点击/触摸。只有一行代码需要更改,即当在触摸屏幕的坐标处找不到链接时从 TextView 中删除选择的代码。
这是完整的类:
public class MyMovementMethod extends ArrowKeyMovementMethod {
private static MyMovementMethod sInstance;
public static MovementMethod getInstance() {
if (sInstance == null) {
sInstance = new MyMovementMethod ();
}
return sInstance;
}
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
}
else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
}
return true;
}
/*else {
that's the line we need to remove
Selection.removeSelection(buffer);
}*/
}
return super.onTouchEvent(widget, buffer, event);
}
}
这样做是非常安全的,即使文档指出:
This interface [MovementMethod] is intended for use by the framework; it should not be implemented directly by applications. http://developer.android.com/reference/android/text/method/MovementMethod.html
上面的代码扩展了一个记录类而不是实现接口(interface)。它所做的只是添加一个检查以查看链接是否被点击,否则使用父类(super class)方法。
关于android - android中EditView中的可点击链接和复制/粘贴菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10572389/
我有一个 EditView 并且我添加了: android:imeActionLabel="Go" 这在键盘中显示“Go”按钮,但我不知道当用户单击“Go”按钮时如何执行操作。 有没有什么解决办法,如
我有 2 个字段:美元和日元。当我更改美元字段时,我想在日元字段中显示转换后的数字,反之亦然。 我的问题是这样的: 如果我有 2 个带有观察者的字段,例如: addTextChangedListene
Activity 中有一个 EditText 和一个 Button,在 EditText 中输入一些文本后,单击按钮,将调用一个方法并将 EditText 的内容传递给如下方法: public cla
我试过 alsorts,但似乎无法让 android 只在换行符处换行.. 即具有以下内容: This is line number 1 /r/n This is a much much longer
我使用 EditText 和 android:password="true" 让用户输入密码。然后我想在用户按下按钮时将密码与硬编码密码进行比较。 但我无法将密码与字符串“mypassword”进行比
我有一个名为“文本”的 EditView。我已经实现了 textWatcher text.addTextChangedListener(this); 每当我尝试将 EditView 设置为 Te
我正在尝试用另一个 View 覆盖 EditText。我的布局似乎有效,但 EditText 仍可点击。我错过了什么? 这是我的基本布局: 这是模拟器 View : 更新:我正在为 Linea
我有一个显示联系人的 TableView。当我单击单元格时,我想直接进入可编辑 View ,而不是转到 CNContactViewController 并按“编辑按钮”。现在我有以下内容: first
1.我创建了一个MultiAutoCompleteTextview。(我使用SimpleAdapter来显示列表) 2.我试过搜索一个字符串。 3.如果我点击列表中的一个项目,它会在 EditText
我遇到了一个小的裁剪问题,我无法使用 TableRow 中的 EditText View 解决该问题。无论我尝试什么,EditText View 要么被剪裁(附上屏幕截图),要么,如果我将 shrin
我正在尝试找出一种让用户选择单词的简单方法,最好是长按 TextView 中的单词。基本上,我有一个充满文本的 TextView,我希望用户能够长按单词然后显示上下文菜单,以便我可以执行数据库搜索?这
当用户点击EditView时,Android会打开键盘以便用户在EditView中书写。 问题是,当用户写完后,没有办法隐藏键盘。用户必须按后退按钮才能隐藏键盘。 有没有办法在键盘上显示一个完成按钮来
在我的应用程序中,我必须从用户那里获取日期。 首先,我使用一个按钮,当用户单击该按钮时,将出现一个对话框,其中包含日期选择器并在一个 TextView 中获取结果。 现在我想用 EditView 替换
我试图在帐户编辑 View 的页眉或页脚中添加自定义 jQuery 脚本,在 Google 中到处搜索,但找不到在页眉或页脚中打印脚本的 Hook 。 我的目标是为自定义字段添加自定义验证,但是一旦我
我目前正在尝试将用户定义数量的 TextView 和 EditText 添加到 Activity 中,但除了通过创建各种不同的 Activity 对其进行硬编码之外似乎无法做到这一点。 此 Activ
从 beforesave 钩子(Hook)逻辑重定向到 editview 如果其中发生错误,我试图从保存 Hook 逻辑之前重定向。它应该重定向到有错误的编辑 View 。我正在使用此代码: func
在 Android 中,我试图完成这个: 基本上,能够将按钮与 EditText 并排添加,它们都占据顶行宽度的 90%。 (我不关心拥有像 Twitter 图标这样的 Logo )。 我试过使用 l
当我运行我的应用程序时,标题中出现错误,我检查了论坛,但我所有的编辑、 TextView 都关闭了。我真的不明白问题出在哪里,我觉得一切都很好。 ride =(EditText)findView
我是一名优秀的程序员,十分优秀!