4

画面の向きが変わったときに onCreate() を再度実行しないようにするために、Android マニフェストに次のコードを追加しました。

android:configChanges="orientation|keyboardHidden|screenSize"

それはいいです。ただし、向きを変更するだけで画面を回転できるようにしたいのですが、onCreate-> onStart-> etcライフサイクルを再度実行することはありません。

メソッド onConfigurationChanged を次のようにオーバーライドしました。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

そして、それはうまくいきます。ただし、デバイスが縦向きモードか横向きモードかによって背景画像を変更する必要があります。コードに次の行を追加してみました。

mBackground.setBackgroundResource(R.drawable.splash_bg);

これの目的は、方向が変更されたので、splash_bg リソースをリロードすることです。これにより、drawable-land フォルダーで画像が検索されます。

したがって、メソッドは次のようになります。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mBackground.setBackgroundResource(R.drawable.splash_bg);
}

しかし、それはまったく正しく機能しません。デバイスを縦向きモードで最初に起動した後、縦向きの背景画像が表示されます。それを (横向きモードに) 回転させると、背景画像が縦向きの背景から横向きの背景 (drawable-land にあるもの) に正常に変更されます。逆もまた真です (横向きから始めて縦向きに切り替えた場合)。これは、drawable-port フォルダー (通常の drawable フォルダーの上) に背景画像の縦向きモード バージョンも含めているためです。

したがって、最初の回転では問題なく動作します。ただし、方向を開始した場所に戻すと、画像が適切な方向タイプに更新されません。基本的には1回のみ有効です。

誰でもこれについて考えがありますか?必要に応じてさらにコードを提供しますが、必要なものはすべて含めたと思います。ありがとう!

4

2 に答える 2

3

まず、使用しないでくださいconfigChanges。それは怠惰な方法であり、将来あなたを噛むことになります. Drawable はキャッシュされるため、向きに適した画像を取得する際に問題が発生している可能性があります (一度は機能するが、その後は機能しない理由を説明できます)。これを回避するには、2 つのドローアブル (splash_bg_port という名前のドローアブルと、splash_bg_land という名前のドローアブル) を用意し、それらを使用して、から受け取る方向をオンにしますnewConfig

また、splash_bg がビットマップ アイテムを含むレイヤー リストである場合、最初にドローアブルにアクセスした後、(キャッシュが原因で) 正しいリソース フォルダーからプルされない場合があることに気付きました。

于 2013-09-11T23:15:30.440 に答える
1

これは動作しますか

@Override
public void onConfigurationChanged(Configuration newConfig) {
 mBackground.setBackgroundResource(R.drawable.splash_bg);
    super.onConfigurationChanged(newConfig);

}
于 2013-09-11T23:36:35.667 に答える