Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从XML生成自定义软键盘:后退按钮不工作_Android_Android Softkeyboard - Fatal编程技术网

Android 从XML生成自定义软键盘:后退按钮不工作

Android 从XML生成自定义软键盘:后退按钮不工作,android,android-softkeyboard,Android,Android Softkeyboard,我正在尝试实现一个自定义的键盘布局(使用XML),并且在经历了很多努力之后,它开始工作了。 问题是,我想有一个“后退”按钮(或其他什么)在我打字完毕后关闭键盘。我已经调查过了,发现我可以用这个 在我的键盘xml布局中包含以下内容: <Key android:codes="4" android:keyLabel="BACK" android:keyEdgeFlags="right" /> ckeyboard.xml: <?xml version="1.0" encoding="

我正在尝试实现一个自定义的键盘布局(使用XML),并且在经历了很多努力之后,它开始工作了。 问题是,我想有一个“后退”按钮(或其他什么)在我打字完毕后关闭键盘。我已经调查过了,发现我可以用这个

在我的键盘xml布局中包含以下内容:

<Key android:codes="4" android:keyLabel="BACK" android:keyEdgeFlags="right" />
ckeyboard.xml:

<?xml version="1.0" encoding="utf-8"?>    
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="33.3%p" android:horizontalGap="0px"
    android:verticalGap="0px" android:keyHeight="54dip">

    <Row>
            <Key android:codes="8" android:keyLabel="1" android:keyEdgeFlags="left" />
            <Key android:codes="9" android:keyLabel="2" />
            <Key android:codes="10" android:keyLabel="3" android:keyEdgeFlags="right" />
    </Row>

    <Row>
            <Key android:codes="11" android:keyLabel="4" android:keyEdgeFlags="left" />
            <Key android:codes="12" android:keyLabel="5" />
            <Key android:codes="13" android:keyLabel="6" android:keyEdgeFlags="right" />
    </Row>

    <Row>
            <Key android:codes="14" android:keyLabel="7" android:keyEdgeFlags="left" />
            <Key android:codes="15" android:keyLabel="8" />
            <Key android:codes="16" android:keyLabel="9" android:keyEdgeFlags="right" />
    </Row>

    <Row>
            <Key android:codes="67" android:keyLabel="DEL"
                    android:keyEdgeFlags="left" />

            <Key android:codes="7" android:keyLabel="0" />

            <Key android:codes="6" android:keyLabel="BACK" android:keyEdgeFlags="right" />
    </Row>        
</Keyboard>

谢谢大家

你到底想做什么?如果你想制作一个全球通用的键盘,那你就大错特错了。您需要从InputMethodService派生并以这种方式使用所有功能。你做事的方式实际上对很多东西都不起作用——你不是在写软键盘,而是在模拟物理键盘。普通的软键盘不使用按键通话,只有物理按键才使用,所以各种功能都不会以这种方式工作。此外,您还缺少很多功能,如自动更正


如果你正试图为你的应用程序制作一个键盘,你的用户会讨厌它,而且它永远不会以这种方式正常工作。你也失去了所有非英语用户,因为他们不能使用特定语言的键盘。但是,将视图可见性设置为.GONE是正确的-您还需要覆盖每个编辑文本的onClick处理程序,并将可见性设置回VISIBLE

事实上,我需要一个简单的数字键盘,它只适用于我的应用程序中的单个特定编辑文本。根本不需要全球化。如果我需要自定义键盘键的颜色,这种方法是否错误?你将如何处理这个问题?谢谢我不知道你为什么需要定制的颜色,但让我们说它是一个游戏或东西,你真的需要的外观。对于一个数字键盘来说,这并不是不合理的。我个人根本不会使用键盘,这会使事情复杂化。我只需要使用10个视图,并覆盖它们的onClick以附加到编辑视图中的文本。但是你已经开始走这条路了,而且你已经非常接近了——因为只有一个编辑文本,覆盖它的点击以使键盘视图再次可见可能是最快的。我正在制作一个应用程序,以便在打印照片时在暗室中使用-因此我想确保来自手机显示屏的所有光线都是某种红色,这样我的曝光就不会改变。我将继续覆盖edittext-on-click方法——只是好奇:如果我有10个视图,它们是否可以覆盖主应用程序布局,以绝对方式定位它们(就像我使用CSS绝对定位一样),使它们看起来像键盘?谢谢好吧,这是一个非常独特但很好的理由。如果你做了10视图的事情,你就可以把它们放在任何你想放的地方——它们都会成为你应用程序的一部分。我从来没有使用过Android的KeyboardView(总是100%自定义),但我认为setPreviewEnabled(false)可以解决这个问题。
<?xml version="1.0" encoding="utf-8"?>    
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="33.3%p" android:horizontalGap="0px"
    android:verticalGap="0px" android:keyHeight="54dip">

    <Row>
            <Key android:codes="8" android:keyLabel="1" android:keyEdgeFlags="left" />
            <Key android:codes="9" android:keyLabel="2" />
            <Key android:codes="10" android:keyLabel="3" android:keyEdgeFlags="right" />
    </Row>

    <Row>
            <Key android:codes="11" android:keyLabel="4" android:keyEdgeFlags="left" />
            <Key android:codes="12" android:keyLabel="5" />
            <Key android:codes="13" android:keyLabel="6" android:keyEdgeFlags="right" />
    </Row>

    <Row>
            <Key android:codes="14" android:keyLabel="7" android:keyEdgeFlags="left" />
            <Key android:codes="15" android:keyLabel="8" />
            <Key android:codes="16" android:keyLabel="9" android:keyEdgeFlags="right" />
    </Row>

    <Row>
            <Key android:codes="67" android:keyLabel="DEL"
                    android:keyEdgeFlags="left" />

            <Key android:codes="7" android:keyLabel="0" />

            <Key android:codes="6" android:keyLabel="BACK" android:keyEdgeFlags="right" />
    </Row>        
</Keyboard>
package com.example.keyboardtest;

import android.app.Activity;
import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
import android.util.Log;
import android.view.KeyEvent;

public class BasicOnKeyboardActionListener implements OnKeyboardActionListener {

    private Activity mTargetActivity;

    public BasicOnKeyboardActionListener(Activity targetActivity) {
            mTargetActivity = targetActivity;
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
            long eventTime = System.currentTimeMillis();
            KeyEvent event = new KeyEvent(
                            eventTime, 
                            eventTime,
                            KeyEvent.ACTION_DOWN, primaryCode, 0, 0, 0, 0,
                            KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE);

            Log.d("KTAG", new Integer(primaryCode).toString());
            mTargetActivity.dispatchKeyEvent(event);

    }

    @Override
    public void onPress(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onRelease(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onText(CharSequence arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void swipeDown() {
        // TODO Auto-generated method stub

    }

    @Override
    public void swipeLeft() {
        // TODO Auto-generated method stub

    }

    @Override
    public void swipeRight() {
        // TODO Auto-generated method stub

    }

    @Override
    public void swipeUp() {
        // TODO Auto-generated method stub

    }
}