java键盘焦点_java – 想要自定义键盘只用于我的APP并恢复上一个应用程序失去焦点...

我按照

this link中的精彩轮廓制作了这个“自定义键盘”,而不是使用ECLIPSE.我使用的是Android Studio(AS)1.1.0.

这是我设备的截图:

唯一的问题是该过程需要更改语言和输入的设置,并且还替换键盘FOR ALL APPS.我不希望这样.我只想让我的应用程序更改自己的键盘,然后在我的应用程序关闭屏幕后立即恢复到以前的键盘,否则我将成为用户屁股的巨大痛苦.而不是那样做,我也可以添加按钮来执行我希望通过自定义键盘调用的按键. (这不是很可怕;用户只需要下拉通知栏并选择选择输入法,但对大多数用户来说仍然过于干扰.)

这是结构:

通过执行以下操作,可以在qwerty.xml中更改键盘:

android:keyWidth="10%p"

android:horizontalGap="0px"

android:verticalGap="0px"

android:keyHeight="60dp"

>

...

这是method.xml:

android:label= "@string/subtype_en_US"

android:imeSubtypeLocale= "en_US"

android:imeSubtypeMode= "keyboard"

/>

这是AndroidManifest.xml:

package="com.dslomer64.simplekeyboard">

android:allowBackup="true"

android:label="@string/app_name"

android:icon="@mipmap/ic_launcher"

android:theme="@style/AppTheme">

android:label="@string/simple_ime"

android:permission="android.permission.BIND_INPUT_METHOD"

>

添加到清单中的服务是通过SimpleIME.java中的代码获取软键盘(省略空覆盖):

import android.inputmethodservice.InputMethodService;

import android.inputmethodservice.Keyboard;

import android.inputmethodservice.KeyboardView;

import android.media.AudioManager;

import android.view.KeyEvent;

import android.view.View;

import android.view.inputmethod.InputConnection;

public class SimpleIME extends InputMethodService

implements KeyboardView.OnKeyboardActionListener

{

private KeyboardView kv;

private Keyboard keyboard;

private boolean caps = false;

@Override

public View onCreateInputView() {

kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);

keyboard = new Keyboard(this, R.xml.qwerty);

kv.setKeyboard(keyboard);

kv.setOnKeyboardActionListener(this);

return kv;

}

private void playClick(int keyCode){

AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);

switch(keyCode){

case 32:

am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);

break;

case Keyboard.KEYCODE_DONE:

case 10:

am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);

break;

case Keyboard.KEYCODE_DELETE:

am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);

break;

default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);

}

}

@Override

public void onKey(int primaryCode, int[] keyCodes) {

InputConnection ic = getCurrentInputConnection();

playClick(primaryCode);

switch(primaryCode){

case Keyboard.KEYCODE_DELETE :

ic.deleteSurroundingText(1, 0);

break;

case Keyboard.KEYCODE_SHIFT:

caps = !caps;

keyboard.setShifted(caps);

kv.invalidateAllKeys();

break;

case Keyboard.KEYCODE_DONE:

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));

break;

default:

char code = (char)primaryCode;

if(Character.isLetter(code) && caps){

code = Character.toUpperCase(code);

}

ic.commitText(String.valueOf(code),1);

}

}

...

}

我想知道是否有人做了我需要的东西:实现一个自定义键盘JUST FOR ONE APP并在失去屏幕焦点时恢复原始.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值