我想阻止用户在键盘存在时打开导航抽屉菜单。我尝试将“focus”和“blur”监听器添加到TextField:
$.searchField.addEventListener('focus', function(e) {
Ti.API.info('locked drawer');
$.drawerLayout.drawerLockMode = Titanium.UI.Android.DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
});
$.searchField.addEventListener('blur', function(e) {
Ti.API.info('unlocked drawer');
$.drawerLayout.drawerLockMode = Titanium.UI.Android.DrawerLayout.LOCK_MODE_UNLOCKED;
});
但是你可以看到没有任何事情发生:
答案 0 :(得分:1)
我使用 NL Fokke Drawer Widget 完成了类似的工作。
使用这个小部件,我创建了这样的窗口:
<强> XML: 强>
<Alloy>
<Widget id="drawer" src="nl.fokkezb.drawer">
<View module="xp.ui" role="leftWindow">
</View>
<NavigationWindow module="xp.ui" platform="ios" role="centerWindow">
<Window>
<Require src="homeView"></Require>
</Window>
</NavigationWindow>
<Window module="xp.ui" platform="android" role="centerWindow">
<Require src="homeView"></Require>
</Window>
</Widget>
<强> JS: 强>
// to close the drawer
$.drawer.instance.setDrawerLockMode($.drawer.module.LOCK_MODE_UNLOCKED);
// to unlock the drawer
$.drawer.instance.setDrawerLockMode($.drawer.module.LOCK_MODE_LOCKED_CLOSED);
如果你没有使用这个小部件,那么我相信你可以将你的代码与这个小部件的代码和&amp;看看它是如何设置锁定模式的。
答案 1 :(得分:-1)
将此代码添加到您的活动
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
View v = getCurrentFocus();
if (v != null &&
(ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) &&
v instanceof EditText &&
!v.getClass().getName().startsWith("android.webkit.")) {
int scrcoords[] = new int[2];
v.getLocationOnScreen(scrcoords);
float x = ev.getRawX() + v.getLeft() - scrcoords[0];
float y = ev.getRawY() + v.getTop() - scrcoords[1];
if (x < v.getLeft() || x > v.getRight() || y < v.getTop() || y > v.getBottom())
hideKeyboard(this);
}
return super.dispatchTouchEvent(ev);
}
public void hideKeyboard(Activity activity) {
if (activity != null && activity.getWindow() != null && activity.getWindow().getDecorView() != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);
}
}