关于Android的EditText使用自定义键盘的问题

小弟最近需要做一个自定义键盘,在网上搜了一些资料。使用android.inputmethodservice.KeyboardView这个东西来实现自定义键盘 遇到了几个小问题 求各位大神们来解答一下。




                keyboardView.setKeyboard(new Keyboard(this, R.xml.qwerty));
keyboardView.setEnabled(true);
keyboardView.setPreviewEnabled(true);

edt_text.setOnTouchListener(new OnTouchListener()
{

public boolean onTouch(View v, MotionEvent event)
{
int inputType = edt_text.getInputType();
edt_text.setInputType(InputType.TYPE_NULL);// 让系统键盘不弹出
showKeyboard();
edt_text.setInputType(inputType);
return false;
}
});

keyboardView.setOnKeyboardActionListener(new OnKeyboardActionListener()
{
public void onKey(int primaryCode, int[] keyCodes)
{
Editable editable = edt_text.getText();
int start = edt_text.getSelectionStart();
if (primaryCode == Keyboard.KEYCODE_CANCEL)
{
hideKeyboard();
}
else if (primaryCode == Keyboard.KEYCODE_DELETE)
{
if (editable != null && editable.length() > 0)
{
editable.delete(start - 1, start);
}
}
else
{
editable.insert(start, Character.toString((char) primaryCode));
}

}

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

}

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

}

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

}

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

}

public void onText(CharSequence text)
{
// TODO Auto-generated method stub

}

public void onRelease(int primaryCode)
{
// TODO Auto-generated method stub

}

public void onPress(int primaryCode)
{
// TODO Auto-generated method stub

}

});
       private void showKeyboard()
{
int visibility = keyboardView.getVisibility();
if (visibility == View.GONE || visibility == View.INVISIBLE)
{
keyboardView.setVisibility(View.VISIBLE);
System.out.println("showKeyboard");
}
}

private void hideKeyboard()
{
int visibility = keyboardView.getVisibility();
if (visibility == View.VISIBLE)
{
keyboardView.setVisibility(View.INVISIBLE);
System.out.println("hideKeyboard");
}
}

Activity布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edt_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/keyboard" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <android.inputmethodservice.KeyboardView
            android:id="@+id/keyboard_view"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:visibility="gone" />
    </RelativeLayout>

</LinearLayout>

自定义键盘布局:

    <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="33%p"
    android:horizontalGap="0px"
    android:verticalGap="0px"
    android:keyHeight="46dip">
    <Row>
        <Key android:codes="49" android:keyLabel="1" />
        <Key android:codes="50" android:keyLabel="2" />
        <Key android:codes="51" android:keyLabel="3" />
<!--         <Key android:codes="57419" -->
<!--             android:keyEdgeFlags="right" -->
<!--             android:keyIcon="@drawable/sym_keyboard_left" /> -->
    </Row>
    <Row>
        <Key android:codes="52" android:keyLabel="4" />
        <Key android:codes="53" android:keyLabel="5" />
        <Key android:codes="54" android:keyLabel="6" />
<!--         <Key android:codes="57421" -->
<!--             android:keyEdgeFlags="right" -->
<!--             android:keyIcon="@drawable/sym_keyboard_right" /> -->
    </Row>
    <Row>
        <Key android:codes="55" android:keyLabel="7" />
        <Key android:codes="56" android:keyLabel="8" />
        <Key android:codes="57" android:keyLabel="9" />
<!--         <Key android:codes="-3" -->
<!--             android:keyHeight="92dip" -->
<!--             android:keyEdgeFlags="right" -->
<!--             android:isRepeatable="true"  两列 -->
<!--             android:keyLabel="完成" /> -->
    </Row>
    <Row>
        <Key android:codes="42" android:keyLabel="*" />
        <Key android:codes="48" android:keyLabel="0" />
        <Key android:codes="35" android:keyLabel="#" />
<!--         <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete" /> -->
    </Row>
</Keyboard>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值