在Android中禁用自定义键盘上的一个键

时间:2012-10-12 12:16:24

标签: android keyboard key

我的Android应用中有自定义keyboard。它的布局在xml中描述如下

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"">
 <Row>
     <Key android:keyLabel="F1" android:keyOutputText="F1"/>
     <Key android:keyLabel="F2" android:keyOutputText="F2"/>
     <Key android:keyLabel="F3" android:keyOutputText="F3"/>
...

所以,我很有兴趣如何禁用,例如'f1'键〜让它变灰和不可触碰。 这里有一些类似的问题,但都是关于默认的soft-KB。

我知道我可以迭代这样的键

for (Keyboard.Key key : myKeyboard.getKeys())

但看起来Keyboard.Key类的对象对于键的外观没有任何变化是无用的。

UPD :我没找到解决方案。我手动实现键盘 - 大相对布局,常用按钮和自定义按钮,一切都很好。顺便说一句 - 自定义键盘至少更美观。只需从droid 4+复制资源 - 您就可以在每个平台上获得漂亮的现代透明按钮和透明布局。

3 个答案:

答案 0 :(得分:1)

我目前正在使用android:horizontalGap在应该放置禁用键的位置放置黑色间隙(带有键的宽度)(这样,我可以隐藏每个屏幕中不允许的键,因为我的键盘总是有相同的分布)。不过,这是一个糟糕的解决方法。

主要问题是最右边的键,因为android:horizontalGap只能设置为键的左侧。但是在最右边的假密钥中使用android:keyWidth="0"属性,然后在那里设置正确的android:horizontalGap,就可以了。一个更差的解决方法......

有更好的解决方案吗?

答案 1 :(得分:1)

通常键盘仅在您编辑某些内容时才可见,因此您可以通过该对象捕获编辑内容。如果它是一个editText框,那么您可以添加一个监听器,然后您可以禁用对编辑文本的任何响应。我不确定这对你有用,但至少你可以捕获任何不需要的输入。

    // add a keylistener to keep track user input
    editText.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // if keydown and "enter" is pressed
            if ((event.getAction() == KeyEvent.ACTION_DOWN)
                    && (keyCode == KeyEvent.KEYCODE_ENTER)) {

                // do some thing or nothing

                return true;

            }

            return false;
        }
    });

答案 2 :(得分:-3)

如果Key是一个按钮,那么很简单:

key.setEnabled(false);

否则,只是让它不可点击:

key.setClickable(false);

...并改变其外观(背景颜色,文字颜色等)。最简单的方法是:

key.setBackgroundColor("0xFFAAAAAA");