標籤:
由於工作需要,所以接觸了自訂鍵盤。但是發現自己寫的鍵盤太過醜陋了一些。廢話不多說,先
第一張是修改後的。第二張是修改錢的。這基本上就是
OK。接下來就是重點了。
android的keyboardview的屬性中是有keybackground 的,但是在使用的時候,卻發現沒有生效。仔細看了下源碼才發現。下面的這句話,把屬性集合給設定成了空。所以就鍵盤的屬性就一直無法生效。
KeyboardView mKeyboardView = new KeyboardView(this, null);
悲劇發生了。就要想解決辦法。這裡既然知道是屬性集合被置空了。那麼就設定屬性集合被。查閱api發現。方法挺多的。就選用了其中一種方法。
XmlPullParser parser =activity.getResources().getXml(R.layout.keyboardview); AttributeSet attributes = Xml.asAttributeSet(parser); int type; try{ while ((type = parser.next()) != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT) { // Empty } if (type != XmlPullParser.START_TAG) { Log.e("","the xml file is error!\n"); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("",""+parser.getAttributeCount()); KeyboardView mKeyboardView = new KeyboardView(this, attributes); mKeyboardView.setFocusable(true); mKeyboardView.setFocusableInTouchMode(true); mKeyboardView.setId(R.id.keyboard_view); mKeyboardView.setVisibility(View.GONE); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); RelativeLayout rlyt = new RelativeLayout(this); rlyt.addView(mKeyboardView, lp);
keyboardview.xml 中存放的是鍵盤keyboardview的屬性集合。在這個地方設定集合不怕不會生效的。
<?xml version="1.0" encoding="utf-8"?><android.inputmethodservice.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/lightblack" android:focusable="true" android:focusableInTouchMode="true" android:keyBackground="@drawable/btn_keyboard_key" android:keyTextColor="@color/white" android:visibility="gone" />
就是這樣的實現了鍵盤的自訂皮膚。
android 自訂鍵盤,代碼實現自訂屬性(自訂鍵盤背景,各個鍵的背景等)