我正在尝试开发一个非常规的键盘,我需要改变一个键中的文本,这取决于按下的其他键的组合。类似考生视图,但在键盘内,在一个键。
我想知道我是否可以改变一个键上的文本,或者我是否可以使用不同的布局键盘XML。
我的键盘是基于软键盘应用程序的例子,可以参考这个链接。
你可以为你的视图使用标签,所以你可以在按下它时使用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
,所以按钮,ImageViews等将工作。
如果你需要KeyboardView使用的"图像"(位图),那么你可以"重绘"(通过覆盖onDrawn()
函数)你的键盘,并对键或其布局进行任何更改…
请注意,键盘,键盘。键等都是促进器,为速度,低内存使用,并绘制"容易",通过改变布局,你可以使用它的任何东西,所以ScrollViews/LinearLayouts/framayouts可以大大简化你的程序/视图,但他们使用更多的内存,检查你的程序是否可以做出这个选择。
编辑:
一个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.");
很抱歉我的英语不好,如果有什么难以理解的,请告诉我
你可以得到所有这样的键
List<Keyboard.Key> keys = mKeyboardView.getKeyboard().getKeys();
通过适当的事件,您可以更改键的图标或标签,检查键盘。键
您可以尝试使用android:keyboardMode
作为Keyboard.Row
的一部分,它根据您所处的模式选择性地显示行。因此,您可以使用不同的行(具有不同值和函数的键)创建多个模式。