我正在尝试将自己的值设置为imeActionId
,然后将其与actionId
中的onEditorAction
进行比较。但是方法中的actionId
重复返回0.
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text|textUri"
android:imeOptions="actionGo"
android:imeActionId="666"
android:imeActionLabel="google"/>
以下是我的onEditorAction
:
et.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// TODO Auto-generated method stub
Log.v("myid iss", "" + actionId);
if(actionId == 666)
{
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("http://" + v.getText().toString()));
imm.hideSoftInputFromInputMethod(v.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
startActivity(i);
}
return false;
}
});
actionId
每次都是0,无论XML中的值如何。
如何使用我定义的imeActionId
与actionId
进行比较。
答案 0 :(得分:3)
很抱歉迟到的回复。仍然为了别人的利益而发布我的答案。实际上,每个imeoptions都有一个unqiueId。为了执行您的任务,您可以使用以下工作代码。
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_GO) {
//Perform your Actions here.
}
return handled;
}
});
有关详细信息,请参阅此LINK。希望你觉得这个答案很有用。
答案 1 :(得分:1)
实际上Android只识别影响软键盘外观的特定动作(例如,存在DONE按钮)。所有此类操作都列在here中,并且没有代码666.:)
您需要为自定义操作做什么?要知道它来自哪里?然后只需查看视图ID:
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (v.getId() == R.id.editText2) {
// Whatever ...
return true;
}
return false;
}
这肯定有用!
答案 2 :(得分:0)
使用android:imeOptions="actionDone"
代替我:
<com.fiverr.fiverr.Views.FVREditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:imeActionLabel="Create"
android:imeActionId="@integer/editor_create_action_id"
android:imeOptions="actionDone"
android:lines="1"
android:maxLines="2"/>
在代码中:
setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
customActionId = getResources().getInteger(R.integer.editor_create_action_id)
if (actionId == customActionId) {
onDonePressedRunnable.run();
}
return false;
}
});
答案 3 :(得分:-2)
//这对我有用
1-从xml中删除android:imeOptions="actionGo"
2-同时检查IME_NULL
值,因为所有这些操作都被视为特殊键,例如:
if(actionId==666 || actionId == EditorInfo.IME_NULL){
...
}
3-另外一个更好的做法是保持资源文件中的所有内容都不是硬编码的,所以例如在values文件夹中创建一个资源文件,将其命名为ids.xml,以及它的外观如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="r_login" format="integer">1001</item>
</resources>
然后您的布局xml文件应如下所示:
android:imeActionId="@id/r_browse"
,您的活动代码应如下所示:
if(actionId==R.id.r_browse || actionId == EditorInfo.IME_NULL){
...
}
干杯;)