2011-06-08 11 views
16

ソフトキーボードの開閉時にロジックを実行するために、ここでさまざまな質問と回答をして、をオーバーライドするAndroidのアクティビティを設定しました。私のコードからの抜粋を以下に示します。onConfigurationChanged()がkeyboardHiddenのために起動しない

のAndroidManifest.xml

... 
<activity 
    android:name=".SearchActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation" 
/> 
... 

SearchActivity.java

... 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    Toast.makeText(this, "onConfigurationChanged()", Toast.LENGTH_SHORT).show(); 
} 
... 

私が向きを変えたときに上記のコードはトーストが表示されます:私は、最も単純なシナリオにそれを煮詰めてきましたソフトキーボードが開いたり閉じたりしても何もしません。私はEditTextを使ってソフトキーボードを開いて、メニューボタンを長押しして手動で開くことでテストしました。 コールを起動しないでください。

したがって、向きの変更が発生するため、コードが正しく機能しているように見えますが、ソフトキーボードは何も表示されません。何か案は?答えが "onConfigurationChanged()がソフトキーボードイベントを捕捉しない"場合、このイベントを検出して処理するための適切な解決策は何ですか?

関連性が高い場合は、Gingerbreadを実行しているDroid Xでテストしています。

+0

私は似たような問題を抱えています。 – Jacky

答えて

14

いいえ、onConfigurationChange()はソフトキーボードイベントを捕捉しません。構成変更ではありません。オリエンテーションの変更により、構成変更の定義である新しいリソースセット(layout-land対layout-portなど)が使用されます。

どのようにするのですか?キーボードが表示されているときにイベントが発生することはありませんが、キーボードがレイアウトを調整するタイミングを検出できます。

コードについてはHow to check visibility of software keyboard in Android?を参照してください。

+29

これは私のバグのように聞こえる。 'keyboardHidden'は明らかに' Configuration'オブジェクトの一部であり、ここの例でも使用されています。http://developer.android.com/guide/topics/resources/runtime-changes.html docsから: 'キーボードが利用可能です。 hardKeyboardHiddenとは異なり、これはソフトキーボードも考慮に入れます。したがって、ハードキーボードは隠されていますが、使用可能なソフトキーボードがある場合、NOに設定されます。値はKEYBOARDHIDDEN_NO、KEYBOARDHIDDEN_YESのいずれかです。 –

関連する問題