【问题标题】:Custom soft keyboard for android run time changing用于更改 android 运行时间的自定义软键盘
【发布时间】:2015-05-11 14:25:54
【问题描述】:

我已经制作了一个软键盘应用程序,如下所示:custom soft keyboard

现在我需要一个选项来从我的 MainActivity 更改该键盘的背景。我该怎么做?
代码如下:

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

这是带有应该改变背景的按钮的 MainActivity:

public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button)findViewById(R.id.test_button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            //Change keyboard background
        }
    });
}
}

【问题讨论】:

    标签: android keyboard android-softkeyboard android-input-method


    【解决方案1】:

    您想在背景布局上添加图像还是更改为主题?

    对于仅更改背景颜色,您需要在布局文件中添加背景颜色,对于主题,您需要首先创建主题,而不是在 java 代码上实现。喜欢以主题为样本;

    // 示例默认主题

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:orientation="vertical"
    
        android:id="@+id/mainview">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/colorBack">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:padding="10dp"
                android:id="@+id/menu_item"
                android:layout_alignParentRight="true"
                android:src="@drawable/ic_more_vert_white_24dp"/>
        </RelativeLayout>
    
        <android.inputmethodservice.KeyboardView
            android:id="@+id/keyboard"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:keyTextColor="@color/colorAccent"
            android:padding="4px"
            android:background="@drawable/images"
            android:keyTextSize="18sp"
            android:keyBackground="@color/colorTransparent"
            android:keyPreviewLayout ="@layout/preview"/>
        </LinearLayout>
    

    对于新创建的 java 中的默认主题实现将如下:

        @Override
        public View onCreateInputView() {
        View view = null;
        if (themes != null && themes.equals("default")) {
                LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.default_theme, null);
                imageView = (ImageView) view.findViewById(R.id.menu_item);
                imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        openOptionsMenu(v);
                    }
                });
                kv = (KeyboardView) view.findViewById(keyboard);
                //kv.setBackgroundResource(R.drawable.images);
                qwertyKeyboard = new Keyboard(this, R.xml.qwerty);
                kv.setKeyboard(qwertyKeyboard);
                kv.setOnKeyboardActionListener(this);
                kv.setOnTouchListener(new HapticListen(7));
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    kv.setBackground(drawable);
                }
                return view;
            }else {
                return  null;
            }
          }
    

    希望我能帮助你理解。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2016-01-11
      • 2011-07-25
      • 2019-11-17
      • 2016-05-29
      • 2016-01-29
      • 2019-01-05
      • 2016-09-27
      • 1970-01-01
      相关资源
      最近更新 更多