我正在尝试开发非常规键盘,我需要更改按键中的文本,具体取决于按下的其他键的组合。 像候选人一样查看但在键盘内,只需一把钥匙。
我想知道我是否可以更改密钥上的文本,或者我是否可以使用不同的键盘XML布局。
我的键盘基于Soft Keyboard应用程序示例,可在此link引用。
答案 0 :(得分:3)
您可以使用Tags作为视图,因此在按下它时可以使用setTag / getTag机制..
private final View.OnClickListener myListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTag() != null) {
if (v.getTag() instanceof String) {
getCurrentInputConnection().commitText((String) v.getTag(), 1);
} else {
Log.v(TAG, "(v.getTag() instanceof String) == false");
}
} else {
Log.e(TAG, "(v.getTag() != null) == false");
}
}
};
密钥的XML示例:
<Button
android:id="@+id/aButton_N"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:tag="n"
android:text="n"
android:onClick="myListener"
android:textAllCaps="false" />
改变的一个例子:
Button myBt = (Button) findViewWithTag("n");
myBt.setTag("N");
出于所有其他目的,请记住“KeyboardView”是一个促进者。在您的视图中,您可以添加child
的任何View
,因此按钮,ImageView等都可以使用。
如果您需要KeyboardView使用的“图像”(位图),那么您可以“重绘”(通过覆盖键盘的onDrawn()
功能),并对键或其布局进行任何更改...
请注意,键盘,Keyboard.Key等都是促进者,为了速度,低内存使用率和绘制“容易度”,通过改变布局,你可以使用任何东西,所以ScrollViews / LinearLayouts / Framelayouts可以大大简化你的程序/视图,但是它们会使用更多的内存,检查你的程序是否可以做出这个选择。
Button
对象有几个属性。它的显示文字是String
,使用button.getText().toString()
来获取它。标签,是任何类型Object
的“指针”....如果要写入按钮的当前文本,并使用其他相关系统,则可以使用以下内容:
private final View.OnClickListener myListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Button thisButton = (Button) v;
getCurrentInputConnection().commitText(thisButton.getText().toString(), 1);
}
};
要更改按钮的“内容”:
Button aButton = (Button) findViewById(YOUR.ID.HERE);
aButton.setText("a new long string to replace the old value.");
抱歉英语不好,如果有什么难以理解的话,请告诉我
答案 1 :(得分:2)
你可以获得这样的所有键
List<Keyboard.Key> keys = mKeyboardView.getKeyboard().getKeys();
通过适当的活动,您可以更改关键字的图标或标签,请检查Keyboard.Key。
答案 2 :(得分:0)
您可以尝试使用android:keyboardMode
作为Keyboard.Row
的一部分,它会根据您所处的模式选择性地显示行。因此您可以创建具有不同行的多个模式(具有不同值的键和函数)。
以下是link供参考。