2011-07-15 10 views
3

と私はマニフェストで私の活動にandroid:configChanges="orientation|keyboard"を与え、私は自分のデバイスを回転させたときに、onConfigurationChangedは常に呼ばれています。それに問題はない。デバイスを回転させたときに私が欲しいものAndroidのローテーション問題はonConfigurationChanged

がある、となっウィジェットのフォントサイズが変更されました。

<TextView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="@dimen/my_font_size" /> 

は、上記のように、textSizeはリソース の値を参照する属性とmy_font_sizeを定義するXMLファイルには、値、土地、値ポートフォルダにあります。

準備できました。それを構築して実行し、デバイスを回転させると、変更はありません。 onConfigurationChanged()のrequestLayout()が機能しません。 それに関するアドバイスはありますか?

ありがとうございました。

+0

ある向きに基づいた化粧品の設計変更は、あなたがあなたのオーバーライドメソッドonConfigurationChanged(に使用してコードを投稿することができ作るのであれば) – Kenny

答えて

0

アクティビティにandroid:configChanges="orientation|keyboard"を指定した場合、Androidはこの変更を処理しません。つまり、適切なリソースファイルを使用してアクティビティを再作成しません。だからこそ、あなたはフォントサイズの変更を取得しません。 Androidでこれを処理したい場合は、マニフェストのアクティビティにconfigChangesを追加しないでください。

4

あなたは(この属性がいくつかのパフォーマンスに敏感なシナリオを有効にするために導入された)その絶対に必要な場合を除きconfigChanges属性を使用しないでください。慎重にHandling Runtime [Congiuration] Changesをお読みください。

このテクニック[configChanges]を使用することは最後の手段と考えるべきであり、ほとんどのアプリケーションでは推奨されません。


あなたに警告した、ここでは、デバイスを回転させたときに変更内容が表示されていない理由の説明です。あなたがあなたの活動にconfigChanges="orientation"を使用しない場合

  • 、あなたの活動は破壊され、新しい方向のためのリソースを再作成されます。この場合、onCreate()のコードでは、正しいリソース(*-landまたは*-port)から値が自動的に選択されます。

  • configChanges="orientation"をお使いの場合は、自動的に変更を適用しないようにAndroidに基本的に言っており、自分ででこれを行います。

    @Override 
    public void onConfigurationChanged(Configuration newConfig) 
    {  
        super.onConfigurationChanged(newConfig); 
    
        int fontSize = getResources().get(R.id.font_size);  
        mTextView.setTextSize(fontSize); 
    } 
    

    しかし、再び、あなたは本当に、ほとんどの場合、configChangesを使用しないでください。

ここで、あなたが本当にconfigChangesを維持する必要があると仮定すると、フォントサイズの問題を修正するために何ができるかです。

+0

感謝君は。これはとても説明します – milosmns

0

あなたは、実際には2つのレイアウトタイプ用の2つの異なるレイアウトファイルを指定し、あなたが望むもので、それぞれを構成することができます。

一部のマニュアル:Application Resources

あなたが望むすべては、おそらく好ましい方法

関連する問題