6
我目前正在開發,將爲使用DPAD作爲其主要輸入設備的設備進行優化的自定義鍵盤的應用程序。定製的Android鍵盤焦點問題
我的問題是當光標在的EditText字段和你按下(例如KEYCODE_DPAD_DOWN),鍵盤視圖不接收焦點和的KeyEvent。要麼沒有任何事情發生,或者所涉及的EditText下的元素獲得焦點。
下面是相關的代碼。
任何幫助將不勝感激。我試過藏漢解剖SoftKeyboard例如作爲KeyboardView.java對於沒有成功的提示。
感謝, 布萊恩
MyKeyboard.java
public class MyKeyboard extends InputMethodService {
private static final String TAG = "MyKeyboard";
private MyKeyboardView mInputView = null;
@Override public void onCreate() {
super.onCreate();
}
@Override public View onCreateInputView() {
mInputView = (MyKeyboardView) getLayoutInflater().inflate(R.layout.input, null);
// attempts to make this focusable
mInputView.setClickable(true);
mInputView.setFocusableInTouchMode(true);
mInputView.setFocusable(true);
mInputView.setEnabled(true);
return mInputView;
}
@Override public View onCreateCandidatesView() {
super.onCreateCandidatesView();
return null;
}
@Override public void onStartInputView(EditorInfo info, boolean restarting) {
super.onStartCandidatesView(info, restarting);
}
@Override public void onFinishInput() {
super.onFinishInput();
}
@Override public void onDestroy() {
super.onDestroy();
}
}
MyKeyboardView.java
public class MyKeyboardView extends TableLayout implements View.OnClickListener, View.OnFocusChangeListener {
private static final String TAG = "MyKeyboardView";
private ArrayList<Character> charList = new ArrayList<Character>();
public MyKeyboardView(Context context) {
super(context);
populateKeyboard();
this.setOnFocusChangeListener(this);
this.setOnClickListener(this);
}
public MyKeyboardView(Context context, AttributeSet attrs) {
super(context, attrs);
populateKeyboard();
this.setOnFocusChangeListener(this);
this.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
Log.d(TAG, "onClick");
}
private void populateKeyboard() {
charList.add(new Character(','));
charList.add(new Character('.'));
charList.add(new Character('?'));
charList.add(new Character('<'));
charList.add(new Character('>'));
charList.add(new Character((char) 0x2798)); // arrow
charList.add(new Character((char) 0x2798)); // arrow
charList.add(new Character((char) 0x2798)); // arrow
charList.add(new Character((char) 0x005F)); // underscore
for(char c = '@'; c < 'Z'; c++) {
charList.add(new Character(c));
Log.d(TAG, "char: " + c);
}
TableRow tr = null;
for(int i=0; i<charList.size(); i++) {
if(i % 7 == 0) {
if(tr != null)
this.addView(tr);
tr = new TableRow(this.getContext());
tr.setGravity(Gravity.CENTER_HORIZONTAL);
}
TextView tv = new TextView(this.getContext());
tv.setPadding(21, 2, 21, 2);
tv.setText(charList.get(i).toString());
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 22);
tv.setTextColor(Color.WHITE);
tv.setGravity(Gravity.CENTER);
tv.setFocusable(true);
tv.setEnabled(true);
tr.addView(tv);
}
if(tr.getChildCount() > 0)
this.addView(tr);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
Log.d(TAG, "mInputView onFocusChange " + (hasFocus ? "true" : "false"));
}
}
的input.xml
<?xml version="1.0" encoding="utf-8"?>
<com.weirdtuesday.mykeyboard.MyKeyboardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#FF000000"
android:focusable="true" />
我剛剛在前些天看到了這個!謝謝!爲了澄清,這屬於InputMethodService的子類。 – 2012-04-09 18:32:48
@BryanStern嗨布萊恩,你可以讓我知道了什麼變化所需的InputMethodService通過重點鑰匙?由於 – CodeFury 2014-04-04 10:02:56
@Sree你找到任何解決方案? – 2016-06-14 09:54:16