2012-01-14 4 views
10

私はタブコントローラーの中にいくつかのインテントを持っていますが、そのうちの1つについては、フォーカスがあるときとフォーカスを失ったときに確認する必要がある編集テキストがあります。 フォーカスリスナー、OnEditorActionListenerなどのイベントのほとんどをマップしましたが、残っている唯一の問題は、フォーカスがあるとソフトキーボードが表示され、どちらかを閉じることです: 1)完了ボタンで(キーボードが見える間にキーボードを閉じるために戻るボタンを無効にする) 2)キーボードが見えている間にバックボタンイベントを検出し、他のコントロールにフォーカスを渡すことができます。アンドロイドキーボードのバックイベントを検出する

私は複数の方法を試しましたが、onBackPressed、onConfigurationChanged(マニフェストのhiddenKeyboardを追加)、アクティビティのkey_downなどは成功しましたが、成功しませんでした。

誰でもこれを成功させましたか?実際には、キーボードが見えて、電話で戻る、私の編集のテキストがフォーカスを失う(otherControl.requestFocus - >これは相対的なレイアウトです)ときにしたいです。

+0

は私を見るあなたはtxtSearchBarはこの1つ 1. – confucius

+0

これまでにしようとしているものを.setOnEditorActionListener(new EditText.OnEditorActionListener()) \t {\t \t public boolean onEditorAction(T extView V、INTたAction、イベントのKeyEvent) \t {\t IF(event.getKeyCode()== KEYCODE_BACK) \t {\t \t layoutFocus.requestFocus()。 \t \t \t \t} \t return false; \t} \t}); 2. onBackPressed、layoutFocus.requestFocus();のメソッド2。 3。私は100ポイントの評判以上のものを持っている場合、私は私の質問に答えることができないとして、より多くのコードを追加することはできません – Catalin

+0

この活動のマニフェストにhiddenKeyboardを追加します。public voidがonConfigurationChanged \t @Override \tを置く(構成newconfigに保存):) – Catalin

答えて

2

ここでは

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
     if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) 
    { //do you back event work here 
      }  
    return super.dispatchKeyEvent(event); 
} 
+2

コードをありがとうが、残念なことには動作しません:(あなたのメソッドを使用して、ソフトキーが既に隠されている(私が完了ボタンを押した後)、そしてプログラムから出て行くときだけ、キーボードが表示され、私は背中を押すと、キーボードの非表示を実行しますが、この方法を実行しません。アンドロイド2.2と2.3でテストしています – Catalin

+0

はい、背を押してキーボードが上がっているとき、そして、それは戻って、あなたが戻ってイベントを聞くことができます、そして、あなたの活動を押した場合にのみ、この場合キーボードアクティビティはこのバックイベントを聞きます.. – AAnkit

+0

キーボードアクティビティからバックを追跡する方法は?キーボードが立ち上がっている間に戻るボタンが使えるのですか?テキストをサブクラス化していくつかのものを変更するようなことは可能でしょうか? – Catalin

9

古い話題ですが、ここではあなたがのEditText上書きされますクラスでこれを置く必要があると予想答え

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { 
     Toast.makeText(getContext(), "BACK", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 
    return super.onKeyPreIme(keyCode, event); 
} 

である(クラスMyEditTextはのEditTextを拡張し...)

3

戻るキーイベントをキャプチャする方法は次のとおりです。1. onKeyPreImeをオーバーライドするためのエクステント編集テキストビュー

package com.test.test; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.KeyEvent; 
import android.widget.EditText; 

/** 
* Created by sumit.saurabh on 11/10/16. 
*/ 

public class ChatEditText extends EditText 
{ 
    /* Must use this constructor in order for the layout files to instantiate the class properly */ 
    public ChatEditText(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    private KeyImeChange keyImeChangeListener; 

    public void setKeyImeChangeListener(KeyImeChange listener) 
    { 
     keyImeChangeListener = listener; 
    } 

    public interface KeyImeChange 
    { 
     public void onKeyIme(int keyCode, KeyEvent event); 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) 
    { 
     if (keyImeChangeListener != null) 
     { 
      keyImeChangeListener.onKeyIme(keyCode, event); 
     } 
     return false; 
    } 
} 

2. XMLでChatEditText

<com.test.test.ChatEditText 
    android:id = "@+id/messageEditText" 
    android:layout_width = "match_parent" 
    android:layout_height = "wrap_content" 
    android:layout_gravity = "bottom" 
    android:layout_marginLeft = "12dp" 
    android:layout_marginRight = "30dp" 
    android:background = "@null" 
    android:hint = "Type your message" 
    android:inputType = "textMultiLine" 
    android:singleLine = "false" 
    android:textColorHint = "#c4c0bd" 
    android:textSize = "18sp"/> 

3.次にどこでもそうなどからリスナーを添付:

private ChatEditText messageEditText; 
    messageEditText = 
     (ChatEditText) findViewById(R.id.messageEditText); 
messageEditText.setKeyImeChangeListener(new ChatEditText.KeyImeChange(){ 
    @Override 
    public void onKeyIme(int keyCode, KeyEvent event) 
    { 
     if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) 
     { 
      // do something 
     } 
    }}); 
関連する問題