2011-11-11 151 views
2

我做的按鈕點擊打開鍵盤和我存儲在字符串中所有按鍵的價值,但我面對這樣的按鈕打開鍵盤點擊

1. when i press CAPITAL keys then i will got 2 times char 
2. when i press search and Menu button then also enter the key 
3. some char i can't get like PIE 

一些問題,因此,請檢查這個代碼,並給我正確的答案。 我的代碼是:

package com.indianic.phykeyboard; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyCharacterMap; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class KeyboardActivity extends Activity { 
    EditText mEdit; 
    Boolean key = false; 

    Button mKey, mMon; 
    String getvalue; 
    InputMethodManager imm; 
    StringBuilder stringBuilder; 
    TextView value; 
    String ch = ""; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mKey = (Button) findViewById(R.id.openkey); 

     value = (TextView) findViewById(R.id.value); 

     mKey.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.toggleSoftInput(0, 0); 
       stringBuilder = new StringBuilder(); 
      } 
     }); 

    } 

    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     switch (keyCode) { 
     case KeyEvent.KEYCODE_ENTER: 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     Log.v("log_tag", "char : " + event.getUnicodeChar()); 

     if (event.getUnicodeChar() != 0) { 
      int i = event.getUnicodeChar(); 
      ch = new Character((char) i).toString(); 
     } 

     if (ch.length() > 0) { 
      if (keyCode == KeyEvent.KEYCODE_DEL && stringBuilder.length() >= 1) { 
       stringBuilder.delete(stringBuilder.length() - 1, stringBuilder 
         .length()); 
      } else if (keyCode != KeyEvent.KEYCODE_DEL 
        && keyCode != KeyEvent.KEYCODE_ENTER) { 
       stringBuilder.append(ch); 
      } else if (keyCode == KeyEvent.KEYCODE_SEARCH 
        || keyCode == KeyEvent.KEYCODE_MENU) { 

      } 
     } 

     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      stringBuilder.delete(0, stringBuilder.length()); 
      finish(); 
     } 

     String str = stringBuilder.toString().trim(); 
     value.setText(str); 

     return false; 
    } 
} 
+0

爲什麼你不能使用[KeyboardView#onText()](http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener .html#onText(java.lang.CharSequence))方法? – Bringer128

+0

@Bringer .......請你可以給我舉個例子或演示這個.. –

回答

2

你可以試試這個代碼:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
     Log.v("log_tag", "char : " + event.getUnicodeChar()); 

     if (event.getUnicodeChar() != 0) { 
      int i = event.getUnicodeChar(); 
      ch += new Character((char) i).toString(); 
     } 
     if (keyCode == KeyEvent.KEYCODE_DEL && ch.length() > 0) { 
      ch = ch.substring(0, ch.length() - 1); 
     } 
     value.setText(ch); 
     return super.onKeyDown(keyCode, event); 
    } 
1
if (event.getUnicodeChar() != 0) { 
     int i = event.getUnicodeChar(); 
     ch = new Character((char) i).toString(); 
    } 

你的程序的一部分數據丟失。 A char不可能包含所有可用的Unicode碼點。我不知道這是否與給你帶來麻煩的東西有關,但這是一個跡象表明你沒有正確地做事,試圖修補你的錯誤可能是一個錯誤 - 解決這個問題需要進行更基本的重構至少你的事件處理程序。