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

在Android中禁用自定义键盘上的一个键,android,keyboard,key,Android,Keyboard,Key,我的Android应用程序中有自定义功能。它是这样用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

我的Android应用程序中有自定义功能。它是这样用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"/>
...
for (Keyboard.Key key : myKeyboard.getKeys())
但看起来类的对象对于键外观的任何更改都是无用的


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

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

key.setEnabled(false);
否则,只需将其设置为不可单击:

key.setClickable(false);
…并更改其外观(背景色、文本颜色等)。最简单的方法是:

key.setBackgroundColor("0xFFAAAAAA");

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

主要问题是最右边的键,因为只能为键的左侧设置
android:horizontalGap
。但是在最右边的假键中使用一个
android:keyWidth=“0”
属性,然后在那里设置正确的
android:horizontalGap
,就可以做到这一点。更糟糕的解决方法


有更好的解决方案吗?

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

    // 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;
        }
    });

什么意思?我不知道密钥继承自什么。它可以是一个按钮子类,也可以是一个视图子类。当然,View并没有Button那个么多方便的方法,这意味着key的超类并不是什么大秘密。这是我的目标。键盘是一个视图,但没有“禁用(键)”或类似的内容。假设没有真正的帮助,尤其是在建议完全不适用的情况下。@Lawnmowerman您是在尝试根据其他条件动态禁用键,还是一直禁用它?一直都是!它应该更容易:-)LawnMowerman我不确定这是否可行,但是编辑XML以添加一个
键图标(并将其设置为一个图像,使其清楚显示按钮被禁用)并将
键输出文本修改为空字符串如何?谢谢您的想法,但它不会起作用,由于keyIcon属性仅更改按钮的“表面”图标,而不是按钮本身。按钮的边框将保持不变,触摸效果仍然有效:-(另一方面,我可以为所有按钮指定一个可自定义绘制的按钮,但那将是无用的,我需要大多数按钮,并且只有一些按钮被禁用…@Lawnmowerman那么我想你唯一的选择(缺少一个完全自定义的键盘)将是完全删除按钮(如果您的布局允许的话)。