2012-02-19 4 views
2

Imはアンドロイドのための入力方法に取り組んで課題の一つは、ハードキーボードのキーを押すのカスタムポップアップキーボードを実装することです。通常、インプットメソッドはエディタに処理させますが、アンドロイドサポートよりも多くのシンボルを追加する必要があります。 私はポップアップキーボードを実装し、ハードキー(文字キー)を長押ししてもうまく表示されるようにしました。私が続いてきたポップアップキーボードの問題、列の制限が指定されているときに

手順は次のとおりです。

  1. は、ポップアップウィンドウを作成します。
  2. はkeyboardviewと閉じるボタンが含まれているリニアレイアウトを膨らませると、関連するオブジェクト
  3. にビューオブジェクト
  4. バインドkeyboardviewと閉じるボタンに保存し、ポップアップ文字のキーボードを作成して、それを設定しますキーボード表示用のキーボード。キーボードは、ポップアップウィンドウ
  5. 表示ポップアップウィンドウ

問題のコンテンツビューとして線形レイアウトを設定5.

  • のカラム制限を有する:ポップアップキーボードの複数の行がある場合I列の最後の行のキーのみを選択できます。その列の最初の行のキーをクリックしても、最後の行のキーが選択されます。 誰がこれが起こっているのか説明できたらどうすればいいですか、私はそれを感謝します。

    CODE:

    PopupWindow mPopupKeyboard = new PopupWindow(this.getBaseContext());    
    mPopupKeyboard.setBackgroundDrawable(null);   
    
    
    if(mPopupKeyboard != null) 
    { 
        this.dismissPopupKeyboard(); 
        View mMiniKeyboardContainer = null; 
        KeyboardView mMiniKeyboard = null; 
        View closeButton = null;   
        mMiniKeyboardContainer = getLayoutInflater().inflate(R.layout.keyboard_popup_keyboard, null);   
        mMiniKeyboard = (KeyboardView) mMiniKeyboardContainer.findViewById(R.id.popup_keyboardView); 
        closeButton = mMiniKeyboardContainer.findViewById(R.id.closeButton); 
        if (closeButton != null) 
        { 
         closeButton.setOnClickListener(new OnClickListener()    
         { 
          @Override 
          public void onClick(View arg0) 
          { 
           mPopupKeyboard.dismiss(); 
         }); 
        } 
        mMiniKeyboard.setOnKeyboardActionListener(this); 
    
        String resourcestring = "abcdefghi"; 
        mMiniKeyboard.setKeyboard(new Keyboard(this.getBaseContext(), R.xml.kbd_popup_template, alternates, 3, 0)); 
        mMiniKeyboard.setPopupParent(mCandidateView);   
        mPopupKeyboard.setContentView(mMiniKeyboardContainer); 
        mPopupKeyboard.setWidth(LayoutParams.WRAP_CONTENT); 
        mPopupKeyboard.setHeight(LayoutParams.WRAP_CONTENT); 
        mPopupKeyboard.showAtLocation(mCandidateView, Gravity.TOP, 0, 0); 
    } 
    
  • 答えて

    2

    私はポップアップキーボードと同様の問題がありました。私はそれがAndroid 2.3でのみ問題であることが分かった。私の唯一の回避策は、複数の行があるポップアップキーボードを避けることでした。 KeyboardViewがMotionEventをオフに送信するため、この問題が発生した

    0

    理由があります。 MotionEvent.getRawX()とgetRawY()は、KeyboardViewの範囲内の座標だけを返します。 MotionEventがKeyboardViewの上で発生すると、KeyboardViewに最も近い絶対座標が返されます。

    一つの解決策は、KeyboardView上記不可視のビューを作成することです。これは、MotionEventを検出し、KeyboardViewに戻ってMotionEventを通過した後、あなたの複数行のポップアップキーボードはKeyboardView上記CandidateViewsで始まるコードの外観について

    を動作する必要があります。たとえば、このプロジェクトを見て:

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    

    https://github.com/blackcj/AndroidCustomKeyboard

    https://github.com/blackcj/AndroidCustomKeyboard/blob/master/app/src/main/java/com/blackcj/customkeyboard/CandidateView.java

    方法は、この声明の中でdesiredHeightに200を追加します。これが原因となりますどのように

    setMeasuredDimension(measuredWidth, resolveSize(desiredHeight, heightMeasureSpec)); 
    

    お知らせmotionEvent.getRawYは()高さ

    に余分200Pのために働くこと
    関連する問題