不知道你是不是做开发的,这是跟这个输入框的属性有关的。我做android开发的,ios不太清楚。
这类输入框是控件EditText,,只需在EditText加一个属性android:imeOptions="actionSearch",这是输入框获取焦点d出软件盘时,就会有搜索,相应的还有android:imeOptions="actionSend"(发送) android:imeOptions="actionNext"(下一项),android:imeOptions="actionDone"(完成),android:imeOptions="actionGo"(前往)等等,也就是说用户本身是不能决定的。如图
'新建一个abctxt然后在打开,运行一下下面的代码试试,我按程序标题查询
Option Explicit
Private Declare Function ShowWindow Lib "user32dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongConst WM_NCACTIVATE = &H86
Const WM_ACTIVATE = &H6
Const SW_SHOW = 5
Const SW_SHOWNORMAL = 1
Const HWND_TOPMOST = -1
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1Private Sub Command1_Click()
Dim s As String, hwn As Long
s = "abctxt - 记事本"
hwn = FindWindow(vbNullString, s)
If hwn = 0 Then
MsgBox "未找到文件!"
Unload Me
End If
ShowWindow hwn, SW_SHOWNORMAL
SendMessage hwn, WM_ACTIVATE, WM_ACTIVATE, 0
SetWindowPos hwn, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
基于Android9x
Window和Session创建成功后,窗口的下一步流程为获取焦点
我们看下焦点获取过程,跟输入法相关的流程
两个Activity切换时,对应的状态变化过程为:
以下是Activity窗口初次获取焦点的流程
当两个activity 切换时,失去焦点的窗口调用过程如下:
对应的,获取焦点的额窗口的调用过程如下:
当B窗口的状态切换到RESUMED时,当窗口的focus可能变化时,会调用updateFocusedWindowLocked
在该方法中,判断,如果还没有执行startInputInner方法,则执行startInputInner方法,否则,直接执行startInputOrWindowGainedFocus方法
主要流程:
1:设置controlFlags的flag为CONTROL_WINDOW_FIRST
2:检查是否已经执行过startInputInner,没有的话执行startInputInner-->startInputOrWindowGainedFocus;否则,直接执行startInputOrWindowGainedFocus
两条路径,携带的startInputReason参数不一样
主要流程:
1:检查要启动和退出的ServedView是否为同一个,如果为同一个,则表示已经执行过startInputInner,则返回false,表示不再执行startInputInner
2:如果获取焦点的是EditorText,会创建跟IMS通信的mServedInputConnectionWrapper对象
主要流程:
1:创建EditorInfo对象tba,这个参数对TextView布局才有意义,它的初始化是在mServedView的onCreateInputConnection完成实例化的
2:根据EditorInfo创建一个InputConnection对象,输入法应用通过该对象,完成输入内容到输入框的传递;ACTIVITY获取焦点场景,该对象
为null,因为没有要输入的对象
startInputOrWindowGainedFocus携带的参数
startInputReason = 1
表示,该流程是窗口获取焦点过程
mClient
应用层创建的IInputMethodClient对象,为服务层提供应用层的各个回调方法
该方法跟应用进程首次创建时Session时,传递到IMMS的对象是同一个对象
windowGainingFocus:
应用层的ViewRootImpl$W对象
controlFlags |= CONTROL_START_INITIAL;
表示window窗口刚开始获取焦点
softInputMode = SOFT_INPUT_ADJUST_RESIZE , 允许调整输入法窗口,避免被其他窗口遮挡
tba , EditorInfo对象
servedContext
null
missingMethodFlags
ic等于null的情况下,为0
当应用层传递的W对象windowToken不为null的时候,则创建windowGainedFocus对象,返回给app
结果返回后,会对IMM的对象进行赋值
如此,进入一个窗口,获取窗口焦点过程,窗口与输入法相关的流程,就结束了。
下一篇:输入法在输入框d出流程
Android输入法(3),d出流程
我懂了,但是只能通过d窗的按钮让d窗消失吧,我是这样理解的,那个dialogd出来就想当进入另一个界面。,所以原来的界面自然是失效的,只有在dialog这个界面结束才能返回原界面,所以你的想法我还真是没有试过,所以抱歉我帮不到了。
没走下去有两个原因
一是代码报错,程序不会继续走下去
二是逻辑控制不对。
你可以打开浏览器控制台查看一下有没有报错。
确保程序走下去,alert之后执行的focus方法,有没有走进去,这简单的代码,直接就可以浏览器Debug的
当editText获取焦点的时候,需要直接调用显示键盘命令:
editTextsetOnFocusChangeListener(new ViewOnFocusChangeListener() {@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialoggetWindow()setSoftInputMode(WindowManagerLayoutParamsSOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
事件form1_getfous
设置焦点参考>
以上就是关于怎么让手机网页输入框获得焦点时d出的软键盘带搜索键 (安卓或者IOS键盘右下角有前往或者搜索字样)全部的内容,包括:怎么让手机网页输入框获得焦点时d出的软键盘带搜索键 (安卓或者IOS键盘右下角有前往或者搜索字样)、VB用什么方法可以将窗体d到最前面获得焦点、Android 输入法窗口焦点获取流程(2) ,输入法窗口和应用窗口绑定等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)