Android-非常规键盘,更改键上的文本

时间:2016-08-29 19:54:35

标签: android keyboard ime android-input-method

我正在尝试开发非常规键盘,我需要更改按键中的文本,具体取决于按下的其他键的组合。 像候选人一样查看但在键盘内,只需一把钥匙。

我想知道我是否可以更改密钥上的文本,或者我是否可以使用不同的键盘XML布局。

我的键盘基于Soft Keyboard应用程序示例,可在此link引用。

3 个答案:

答案 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供参考。