【问题标题】:Android- Unconventional Keyboard, change text on a keyAndroid-非常规键盘,更改按键上的文字
【发布时间】:2017-01-05 22:49:48
【问题描述】:

我正在尝试开发一个非常规的键盘,我需要更改一个键中的文本,具体取决于按下的其他键的组合。 与 Candidates View 类似,但在键盘内,一键完成。

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

我的键盘基于软键盘应用程序示例,可以在此link 参考。

【问题讨论】:

  • 此键盘适用于所有应用还是仅适用于您的应用?
  • 适用于所有应用,谢谢。

标签: android keyboard ime android-input-method


【解决方案1】:

您可以将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");
            }
        }
    };

还有一个key的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 中的任何child,因此按钮、图像视图等都可以使用。

如果您需要 KeyboardView 使用的“图像”(位图),那么您可以“重绘”(通过覆盖onDrawn() 函数)您的键盘,并对按键或其布局进行任何所需的更改。 .

请注意,Keyboard、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.");

抱歉英语不好,如果有什么难以理解的地方,请告诉我

【讨论】:

  • 谢谢,在您的示例中,正如您在 Button 中所说的那样,我无法在 xml“qwerty”中使用 TAG。我需要从我的代码中用另一个字符串更改参数 (android:keyLabel="a")。这就是为什么我问我是否可以使用“qwerty”以外的其他布局。我能做些什么?。我的英语也不好。
  • @Ckst 请检查答案,并检查它是否符合您的需求。 TAG 是我使用的系统,但是,可以使用另一个更简单的示例。
【解决方案2】:

你可以得到所有这样的钥匙

List&lt;Keyboard.Key&gt; keys = mKeyboardView.getKeyboard().getKeys();

通过适当的事件,您可以更改键的图标或标签,检查Keyboard.Key

【讨论】:

    【解决方案3】:

    您可以尝试使用Keyboard.Row 中的android:keyboardMode,它会根据您所处的模式选择性地显示行。因此您可以创建具有不同行的多个模式(具有不同值和功能的键)。

    这里是link 供参考。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2012-07-12
      • 2015-01-03
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多