viv*_*k.m 3 android actionbarsherlock
我在tabhost中显示EditText.Tabhost位于SherlockFragmentActivity中.
假设我处于触摸模式,我点击EditText给它焦点并开始输入.键入2-3个字符后,我决定使用我的硬键盘.只要按下第一个硬键,我就会退出触摸模式,这也会使焦点移回当前选定的标签.只要我不使用硬导航键将焦点恢复到我的EditText,我将无法输入EditText.
仅当TabHost不在TabActivity中时才会导致此问题.
重现此问题的快速示例代码可能是 - ActionBarSherlock示例代码的FragmentTabs活动.选择CustomTab并尝试使用硬键盘在操作栏中的搜索视图内键入任何文本.看焦点只是移动到选项卡.
问题在Android 2.2,4.0和使用ICS模拟器上也是可重现的.
有没有人有更多的信息.关于这个问题?
(这里似乎提到了一种解决方法:https://stackoverflow.com/a/8684025/333137但它看起来像一个黑客)
谢谢.
编辑:经过更多调查,我在TabHost类中找到了setup()函数,只有在TabActivity中没有使用TabHost时才需要调用它.它注册一个键侦听器,只有在按下硬键时才会收到回调.
void setup(){
// KeyListener to attach to all tabs. Detects non-navigation keys
// and relays them to the tab content.
mTabKeyListener = new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
return false;
}
**mTabContent.requestFocus(View.FOCUS_FORWARD);**
return mTabContent.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
我不确定它为什么调用requestFocus(View.FOCUS_FORWARD),但这并没有将焦点设置在其中的EditText(应该是什么?).此外,如果在操作栏中搜索视图,它完全在选项卡外.
Han*_*ank 15
如下所示覆盖TabHost,它适用于我.
public class TabHostExt extends TabHost {
public TabHostExt(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TabHostExt(Context context) {
super(context);
}
@Override
public void onTouchModeChanged(boolean isInTouchMode) {
// leave it empty here. It looks that when you use hard keyboard,
// this method will be called and the focus will be token.
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3241 次 |
最近记录: |