Android 从XML生成自定义软键盘:后退按钮不工作
我正在尝试实现一个自定义的键盘布局(使用XML),并且在经历了很多努力之后,它开始工作了。 问题是,我想有一个“后退”按钮(或其他什么)在我打字完毕后关闭键盘。我已经调查过了,发现我可以用这个 在我的键盘xml布局中包含以下内容:Android 从XML生成自定义软键盘:后退按钮不工作,android,android-softkeyboard,Android,Android Softkeyboard,我正在尝试实现一个自定义的键盘布局(使用XML),并且在经历了很多努力之后,它开始工作了。 问题是,我想有一个“后退”按钮(或其他什么)在我打字完毕后关闭键盘。我已经调查过了,发现我可以用这个 在我的键盘xml布局中包含以下内容: <Key android:codes="4" android:keyLabel="BACK" android:keyEdgeFlags="right" /> ckeyboard.xml: <?xml version="1.0" encoding="
<Key android:codes="4" android:keyLabel="BACK" android:keyEdgeFlags="right" />
ckeyboard.xml:
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="33.3%p" android:horizontalGap="0px"
android:verticalGap="0px" android:keyHeight="54dip">
<Row>
<Key android:codes="8" android:keyLabel="1" android:keyEdgeFlags="left" />
<Key android:codes="9" android:keyLabel="2" />
<Key android:codes="10" android:keyLabel="3" android:keyEdgeFlags="right" />
</Row>
<Row>
<Key android:codes="11" android:keyLabel="4" android:keyEdgeFlags="left" />
<Key android:codes="12" android:keyLabel="5" />
<Key android:codes="13" android:keyLabel="6" android:keyEdgeFlags="right" />
</Row>
<Row>
<Key android:codes="14" android:keyLabel="7" android:keyEdgeFlags="left" />
<Key android:codes="15" android:keyLabel="8" />
<Key android:codes="16" android:keyLabel="9" android:keyEdgeFlags="right" />
</Row>
<Row>
<Key android:codes="67" android:keyLabel="DEL"
android:keyEdgeFlags="left" />
<Key android:codes="7" android:keyLabel="0" />
<Key android:codes="6" android:keyLabel="BACK" android:keyEdgeFlags="right" />
</Row>
</Keyboard>
谢谢大家 你到底想做什么?如果你想制作一个全球通用的键盘,那你就大错特错了。您需要从InputMethodService派生并以这种方式使用所有功能。你做事的方式实际上对很多东西都不起作用——你不是在写软键盘,而是在模拟物理键盘。普通的软键盘不使用按键通话,只有物理按键才使用,所以各种功能都不会以这种方式工作。此外,您还缺少很多功能,如自动更正
如果你正试图为你的应用程序制作一个键盘,你的用户会讨厌它,而且它永远不会以这种方式正常工作。你也失去了所有非英语用户,因为他们不能使用特定语言的键盘。但是,将视图可见性设置为.GONE是正确的-您还需要覆盖每个编辑文本的onClick处理程序,并将可见性设置回VISIBLE事实上,我需要一个简单的数字键盘,它只适用于我的应用程序中的单个特定编辑文本。根本不需要全球化。如果我需要自定义键盘键的颜色,这种方法是否错误?你将如何处理这个问题?谢谢我不知道你为什么需要定制的颜色,但让我们说它是一个游戏或东西,你真的需要的外观。对于一个数字键盘来说,这并不是不合理的。我个人根本不会使用键盘,这会使事情复杂化。我只需要使用10个视图,并覆盖它们的onClick以附加到编辑视图中的文本。但是你已经开始走这条路了,而且你已经非常接近了——因为只有一个编辑文本,覆盖它的点击以使键盘视图再次可见可能是最快的。我正在制作一个应用程序,以便在打印照片时在暗室中使用-因此我想确保来自手机显示屏的所有光线都是某种红色,这样我的曝光就不会改变。我将继续覆盖edittext-on-click方法——只是好奇:如果我有10个视图,它们是否可以覆盖主应用程序布局,以绝对方式定位它们(就像我使用CSS绝对定位一样),使它们看起来像键盘?谢谢好吧,这是一个非常独特但很好的理由。如果你做了10视图的事情,你就可以把它们放在任何你想放的地方——它们都会成为你应用程序的一部分。我从来没有使用过Android的KeyboardView(总是100%自定义),但我认为setPreviewEnabled(false)可以解决这个问题。
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="33.3%p" android:horizontalGap="0px"
android:verticalGap="0px" android:keyHeight="54dip">
<Row>
<Key android:codes="8" android:keyLabel="1" android:keyEdgeFlags="left" />
<Key android:codes="9" android:keyLabel="2" />
<Key android:codes="10" android:keyLabel="3" android:keyEdgeFlags="right" />
</Row>
<Row>
<Key android:codes="11" android:keyLabel="4" android:keyEdgeFlags="left" />
<Key android:codes="12" android:keyLabel="5" />
<Key android:codes="13" android:keyLabel="6" android:keyEdgeFlags="right" />
</Row>
<Row>
<Key android:codes="14" android:keyLabel="7" android:keyEdgeFlags="left" />
<Key android:codes="15" android:keyLabel="8" />
<Key android:codes="16" android:keyLabel="9" android:keyEdgeFlags="right" />
</Row>
<Row>
<Key android:codes="67" android:keyLabel="DEL"
android:keyEdgeFlags="left" />
<Key android:codes="7" android:keyLabel="0" />
<Key android:codes="6" android:keyLabel="BACK" android:keyEdgeFlags="right" />
</Row>
</Keyboard>
package com.example.keyboardtest;
import android.app.Activity;
import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
import android.util.Log;
import android.view.KeyEvent;
public class BasicOnKeyboardActionListener implements OnKeyboardActionListener {
private Activity mTargetActivity;
public BasicOnKeyboardActionListener(Activity targetActivity) {
mTargetActivity = targetActivity;
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
long eventTime = System.currentTimeMillis();
KeyEvent event = new KeyEvent(
eventTime,
eventTime,
KeyEvent.ACTION_DOWN, primaryCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE);
Log.d("KTAG", new Integer(primaryCode).toString());
mTargetActivity.dispatchKeyEvent(event);
}
@Override
public void onPress(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onRelease(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onText(CharSequence arg0) {
// TODO Auto-generated method stub
}
@Override
public void swipeDown() {
// TODO Auto-generated method stub
}
@Override
public void swipeLeft() {
// TODO Auto-generated method stub
}
@Override
public void swipeRight() {
// TODO Auto-generated method stub
}
@Override
public void swipeUp() {
// TODO Auto-generated method stub
}
}