Articles of android input method

检测在Android中关闭键盘事件

我有一个需要像iOS中的文本字段一样运行的edittext。 当我点击它时,应该变得可编辑,否则它应该被禁用。 假设用户想要编辑某个值,当他按下后退按钮时,随着键盘关闭,我希望编辑文本被禁用以进行编辑。 我正在使用的是setCursorVisible(true)和setCursorVisible(false)方法。 我确实尝试过使用keyCode事件,但他们没有帮助。 这是我到目前为止尝试过的: @Override public void onBackPressed() { // Had the InputMethodManager service here.. if(imm.isAcceptingText()) { Toast.makeText(ProfileActivity.this,”working”,Toast.LENGTH_SHORT).show(); } else { super.onBackPressed(); Toast.makeText(ProfileActivity.this,”back pressed called”,Toast.LENGTH_SHORT).show(); } } 还尝试重写keyDown事件。 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //replaces the default ‘Back’ button action if(keyCode==KeyEvent.KEYCODE_BACK) { Log.d(“123″,”called,called”); return true; } return super.onKeyDown(keyCode, event); }

InputConnection.commitText(CharSequence text,int newCursorPosition)只能提交英文字符和数字?

我实现了一个名为RemoteInput的输入方法,只是扩展InputMethodService,没有InputViews而没有键盘。 当用户选择RemoteInput作为默认IME时, RemoteInput会将当前输入状态发送给其他设备,用户可以远程执行输入操作(使用我们的定制协议)。 输入完成后,在其他设备中输入的文本将被发送回当前设备,然后RemoteInput使用InputConnection.commitText (CharSequence text, int newCursorPosition)将文本提交到当前UI组件(例如EditText InputConnection.commitText (CharSequence text, int newCursorPosition) 。 当远程输入的文本是英文字符和数字时,它是完美的,但是当涉及到其他字符时,事情就出错了。 我发现InputConnection.commitText过滤了其他字符。 例如,我输入hello你好 ,只有hello成功提交。 和更多: hello world ==> helloworld hello,world!! ==> helloworld 你提出的任何事情都会有所帮助,在此先感谢你们。 这是我的代码: public class RemoteInput extends InputMethodService { protected static String TAG = “RemoteInput”; public static final String ACTION_INPUT_REQUEST = “com.aidufei.remoteInput.inputRequest”; public static final String ACTION_INPUT_DONE = “com.aidufei.remoteInput.inputDone”; private […]

通过Android API发送密钥组合(元密钥和密钥代码)

我无法弄清楚如何使用Android(我使用API​​级别11 =版本3.0)发送元键(例如CTRL)和键码(例如用于RETURN)的组合。 KeyEvent类的文档提到了诸如META_CTRL_ON之类的常量,并且还支持元键的键码常量(例如KEYCODE_CTRL_LEFT )。 我正在使用Javascript Key Event Tester测试输入法编辑器(IME)生成的输出。 顺便说一句,我的目标是开发一个软件键盘。 如果我理解文档是正确的,那么只执行以下代码来发送CTRL键就足够了: this.sendDownUpKeyEvents(KeyEvent.KEYCODE_CTRL_RIGHT); 但是当针对Javascript Key Event Tester(见上文)执行此操作时,没有任何反应。 因此,我需要了解如何仅发送元键以及将元键与另一个键组合发送。 我也尝试了以下发送SHIFT + ENTER(一个具体的例子): private void _sendShiftEnter() { this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT); final long eventTime = SystemClock.uptimeMillis(); this.getCurrentInputConnection().sendKeyEvent( new KeyEvent( eventTime, // The time (in uptimeMillis()) at which this key code originally went down. eventTime, // The time (in uptimeMillis()) at which this […]

Android:如何在软输入/键盘上捕获长按事件?

问题的简短版本:如何在Android中的软输入/键盘上捕获长按事件? 长版:在Android应用程序中,我们有一个多行EditText,我们希望有这样的行为:1。默认情况下,它显示一个DONE按钮,通过点击它,软输入/键盘将被关闭。 2.如果用户长按DONE按钮,其行为将更改为ENTER按钮,EditText中将有一个新行。 对于需求#1,我在这里使用了解决方案: https : //stackoverflow.com/a/12570003/4225326 对于需求#2,我遇到的阻塞问题是,如何捕获长按事件。 我设置了onEditorActionListener,但捕获的事件为null: http : //developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html我搜索了文档,长按相关的方法是硬键盘: http:http: //developer.android.com/reference/android/view/View.html#onKeyLongPress(int,android.view.KeyEvent ),我找不到一个用于软输入/键盘。 感谢您查看此问题。

Android软键盘的自定义inputType /键设置

我正在研究改变Android的输入方法的各个部分,特别是输入坐标。 所需的键/字符是1234567890.-:当选择数字有符号和小数时,我有前12个被覆盖,但不能得到:被包括或任何其他可以取代它的角色(完美的是有一个°键)。 我现在用输入filter编写过滤这些字符:它可以工作,但它不漂亮。 我遇到的主要问题是我无法让键盘在数字侧而不是字母侧打开。 我非常感兴趣的另一个选择是修改现有的电话types键盘以包括我想要的键。 它会消除很多杂乱,并使剩余的键更大,从而使输入更容易。

方向更改后,showSoftInput不起作用

我有一个带有单个EditText的片段,需要软键盘不断打开。 旋转屏幕时键盘会隐藏。 我在OnActivityCreated中调用showSoftInput,它在旋转后执行,但它不显示键盘。 InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(edit, 0); 注意:我不想使用toggleSoftInput。 我试过了,但在某些情况下它最终会关闭键盘。 并且无法查询android以确定键盘是否已打开。

如何制作像应用程序一样的滑动键盘

我想知道哪个是手机键盘背后的技术,如Swype Keyboard或Nexus 4股票键盘。 我为此搜索了很多,但找不到任何有用的东西。 我显然在简单的kayboard的sdk样本中find了这个例子,并从中开始,以便了解IME开发背后的原理。 现在我了解了它是如何工作的,我想了解这种键盘是如何工作的。 我认为它与手势有关,我研究了它们,但它看起来是错误的方式。 所以我问这个问题是什么样的技术是基础。 是画画吗? 我需要找不到Canvas ecc吗? 谢谢

在调用显示ProgressDialog的新Activity后隐藏键盘

我在屏幕键盘上遇到了麻烦。 我有一个带有EditText的活动,它显示键盘,还有一个按钮,用于转到第二个活动。 第二个活动在onCreate()上显示ProgressDialog ,做东西,并解散ProgressDialog 。 问题是显示ProgressDialog键盘也是如此。 我想在创建ProgressDialog之前键盘消失。 我搜索了StackOverflow和其他网站,但似乎没有任何东西可以用于这个特定的场景。 我附上两张照片供你参考: http://img.androidcookie.com/android/2rzq7b6.png http://img.androidcookie.com/android/34ret1z.png 这是第一个活动的代码: public class FirstActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); } }); } } 这是第二个活动的代码: public class SecondActivity extends Activity { @Override public […]

对getCurrentActivity的引用使得无法在Android上构建InputMethodService

https://github.com/facebook/react-native/issues/7762 我正在尝试在Android上使用React-Native构建自定义键盘。 它们是用InputMethodService实现的,因此很难提供一个rnplay。 我已经跟踪了DialogModule.class文件中的以下代码 public void onHostResume() { this.mIsInForeground = true; DialogModule.FragmentManagerHelper fragmentManagerHelper = this.getFragmentManagerHelper(); Assertions.assertNotNull(fragmentManagerHelper, “Attached DialogModule to host with pending alert but no FragmentManager (not attached to an Activity).”); fragmentManagerHelper.showPendingAlert(); } @Nullable private DialogModule.FragmentManagerHelper getFragmentManagerHelper() { Activity activity = this.getCurrentActivity(); return activity == null?null:(activity instanceof FragmentActivity?new DialogModule.FragmentManagerHelper(((FragmentActivity)activity).getSupportFragmentManager()):new DialogModule.FragmentManagerHelper(activity.getFragmentManager())); } 以下是我如何设置SimpleIME package com.customKeyboard; import […]

为什么android InputMethodManager.showSoftInput()返回false?

最近在开发应用程序时,我遇到了一个问题。 我在谷歌搜索了很多,但找不到任何解决方案。 最后,我遇到了这个Android问题跟踪器 为了解释我的问题,我制作了一个示例App。 我的示例应用程序的基本工作 我有一个屏幕,它有一个EditText,一个Button和一个RelativeLayout。 RelativeLayout的宽度和高度为0px。 这只是将焦点从EditText移开的视图。 当App启动时,焦点位于RelativeLayout,而不是EditText(因此其中没有闪烁的光标。) 当用户点击Button I时,只需使用RelativeLayout上的requestFocus()调用将焦点移动到RelativeLayout。 当用户点击EditText时,会出现键盘。 我可以输入文字。 我想要实现的目标 如果我在键盘可见时改变手机的方向,那么在取消定位后,键盘应该保持不变。 如果键盘是可见的,其他一些活动就在它上面,例如闹钟,Facebook聊天头,从通知区域打开东西,锁定解锁设备等等。然后返回到示例应用程序键盘应该是可见的。 我是如何实现这一目标的 在onSaveInstanceState()中,我检查焦点是否在EditText上,然后在Bundle中放置一个布尔variables。 在onStop()中,我设置了一个布尔标志wasEditing = true 。 在onRestoreInstanceState()中,我检查了Bundle是否在onSaveInstanceState()中设置了标志值。 如果是,那么我是wasEditing = true 。 在onResume()中,我检查这是wasEditing ,如果是,我请求焦点为EditText。 之后我调用imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT,resultRec) 我在哪里遇到问题 有时在执行此调用后,键盘在少数情况下不可见,例如在方向更改期间。 当我放入日志时,我发现此函数返回false 但是如果我使用onResume() showSoftInput()使这个showSoftInput()调用延迟100ms,一切正常。 问题在什么情况下此函数返回false并且为什么延迟有效? 注意虽然我已经使用延迟解决了我的问题,但我仍然想知道为什么它表现得那样。