15

縦向きのプライマリ レイアウト (縦向きに固定されている) を持つアプリケーションがあり、テキストを入力する場所が 1 つあります。背景画像がぼやけて横向きのポップアップウィンドウのように起動したいと思います。ポップアップ ウィジェットがあることは知っていますが、テキスト編集ボックスを回転させるためのアイデアは素晴らしいでしょう。キーボード スライドでテキスト ボックスを含む新しい画面を表示する場合と同様に、キーボードをスライドさせたときにポートレート ビュー (テキスト ボックスのみ) に回転することもできます。

4

1 に答える 1

39

問題の最も簡単な解決策は、メインの (縦に固定された) アクティビティ内から起動EditTextする別のテーマのアクティビティ内に表示することです。dialog

EditText アクティビティの向きは固定されていないため、キーボードをスライドさせたときに期待どおりに回転します。

テキスト入力アクティビティの作成

EditText ビューと、含めたいものだけを含む新しいアクティビティを作成します (おそらく [OK] / [キャンセル] ボタンと、おそらくラベル?)。マニフェスト内でテーマを に設定しTheme.Dialogます。

<activity android:name="TextEntryActivity" 
          android:label="My Activity" 
          android:theme="@android:style/Theme.Dialog"/>

ダイアログの背後にあるアクティビティを曇らせたりぼかしたりするには、フォアグラウンド アクティビティ (テキスト入力ダイアログ) の Window プロパティを変更します。その onCreate メソッド内でgetWindow().setFlags、背景のアクティビティにぼかしを適用するために使用します。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,  
                     WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

テキスト入力アクティビティからの入力値の起動と読み取り

startActivityForResultテキスト入力アクティビティを起動するために使用します。その Activity 内で、この投稿setResultで説明されている手法を使用して、返されたインテント内に入力されたテキスト文字列を返すように呼び出します。

メソッドをオーバーライドしてonActivityResult、サブ アクティビティからの結果をリッスンします。

公開されたキーボードでの起動のトリガー

テキスト入力アクティビティはいつでも起動できますが、キーボードが表示されているときに常に表示したい場合は、このイベントを明示的にキャプチャできます。

android:configChangesまず、ポートレート アクティビティのマニフェスト エントリに属性を追加します。をリッスンするように登録する必要がありますkeyboardHidden

android:configChanges="keyboardHidden"

そのアクティビティ内で、オーバーライドonConfigurationChangedしてテキスト入力アクティビティを起動します。

@Override
public void onConfigurationChanged(Configuration newConfig) {  
  Intent i = new Intent(this,TextEntryActivity.class);    
  startActivityForResult(i, STATIC_INTEGER_VALUE);
}

テキスト入力アクティビティを起動する前に、newConfig 変数を使用して、キーボードが (非表示ではなく) 公開されていることを確認することをお勧めします。

キーボードが非表示のときに、同じ手法を使用して、テキスト入力アクティビティから自動的に戻ることもできます。

于 2009-01-20T09:18:09.257 に答える