【问题标题】:Disable one key on custom keyboard in Android在Android中禁用自定义键盘上的一键
【发布时间】:2012-10-03 06:11:41
【问题描述】:

我的 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”键~让它变灰且不可触摸。 这里有一些类似的问题,但都是关于默认软知识库的。

我知道我可以像这样遍历键

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

但看起来Keyboard.Key 类的对象对于键外观的任何更改都是无用的。

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

【问题讨论】:

  • @thelawnmowerman 您是尝试根据其他条件动态禁用密钥还是一直禁用它?
  • 一直以来!它应该更容易:-)
  • @thelawnmowerman 我不确定这是否可行,但是如何编辑 XML 以添加 keyIcon(并将其设置为明确禁用按钮的图像)并修改keyOutputText 是空字符串?
  • 感谢您的想法,但它不起作用,因为 keyIcon 属性仅更改按钮的“表面”图标,而不是按钮本身。按钮的边框保持不变,触摸效果仍然有效:-(另一方面,我可以为所有按钮指定一个自定义可绘制对象,但这没有用,我需要大部分按钮只有一些残疾人......
  • @thelawnmowerman 那么我认为您唯一的选择(缺少完整的自定义键盘)是完全删除按钮(如果您的布局允许的话)。

标签: android keyboard key


【解决方案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】:

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

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

    有更好的解决方案吗?

    【讨论】:

      【解决方案3】:

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

      key.setEnabled(false);
      

      否则,就让它不可点击:

      key.setClickable(false);
      

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

      key.setBackgroundColor("0xFFAAAAAA");
      

      【讨论】:

      • 什么意思?我不知道 Key 继承自什么。它可以是 Button 子类,也可以是 View 子类。当然,View 没有 Button 那么多方便的方法
      • 我的意思是密钥的超类并不是什么大秘密。是对象。键盘是一个视图,但没有“禁用(键)”或类似的东西。
      • 假设并没有真正的帮助,尤其是在这种建议绝对不适用的情况下。
      猜你喜欢
      • 2018-06-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2013-01-18
      • 2017-06-29
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      相关资源
      最近更新 更多