我正在尝试开发一个非常规键盘,我需要根据按下的其他键的组合来更改某个键中的文本。 与“候选人 View ”类似,但在键盘内,一键操作。
我想知道是否可以更改按键上的文本,或者是否可以对键盘 XML 使用不同的布局。
我的键盘是基于软键盘应用程序示例,可以引用此link .
最佳答案
您可以使用Tags对于您的 View ,因此您可以在按下它时使用 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”是一个促进者。在您的 View 中,您可以添加 View
的任何子
,因此 Button、ImageView 等都可以使用。
如果您需要 KeyboardView 使用的“图像”(位图),那么您可以“重绘”键盘(通过覆盖 onDrawn()
函数),并进行所需的任何更改对于按键或其布局...
请注意,Keyboard、Keyboard.Key 等都是促进者,为了速度、低内存占用和绘制“轻松”,通过改变布局,您可以使用任何东西,所以 ScrollViews/LinearLayouts/Framelayouts可以极大地简化您的程序/ View ,但它们会使用更多的内存,请检查您的程序是否可以做出此选择。
编辑:
Button
对象具有多个属性。它的显示文本是一个String
,使用button.getText().toString()
来获取它。标签,是指向任何类型的对象
的“指针”......如果您想写入按钮的当前文本,并使用另一个相关系统,您可以使用以下内容:
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.");
抱歉英语不好,如果有什么难以理解的地方,请告诉我
关于Android-非常规键盘,更改按键上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214153/