2011-07-05 18 views
0

私は方向性をの活動は、肖像画にロックされています:更新子ビューは

<activity android:name="MainActivity" android:label="@string/app_name" 
     android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"> 

しかし活動の中に私が持っている私は、特にいくつかのテキスト、四角形を描画しているいくつかのカスタムビュー、矢印を表すパス。

アクティビティ全体のレイアウトを変更することなく、電話機を回転させたときに矢印を更新できるようにする必要があります。

アクティビティとレイアウトは常にポートレートですが、電話機をポートレートからランドスケープに傾けたときには、ネストされたビューに通知して再描画する必要があります。

物理的な向きの変更をリッスンし、更新して入れ子になったビューに再描画を指示するにはどうすればよいですか?

おかげで、P

答えて

0

UPDATE

現在アクティブなActivityportraitまたはlandscapescreenOrientationセットを持っていたときに姿勢の変化を検出する方法がないように見えます(ただし他の値をテストしていません。放送受信機を使用していてもACTION_CONFIGURATION_CHANGED

私が考えることができる唯一の方法は、手動でセンサーを追跡することです。


これが動作していません。

あなたのActivityonConfigurationChanged()関数をオーバーライドし、その機能から、あなたのUIを更新する必要があります。

この関数を呼び出すには、アクティビティにandroid:configChanges="orientation"を追加する必要があることに注意してください。

+0

xml属性とメソッド実装(呼び出されたときにトーストが表示されるはずです)の両方を追加しましたが、何も起こりません。私はそれが 'screenOrientation =" portrait "設定のためだと思いますか? – pstanton

+0

@inazaruk - 私は今行ったので、マニフェストでscreenOrientationをロックしてみましたが、onConfigurationChangedはまったく呼び出されませんでした – Marmoy

+0

あなたは正しいです。 'screenOrientation'が設定されていると、画面の向きの設定変更は報告されません。 – inazaruk

1

もちろん可能です! OrientationEventListenerをサブクラス化し、onOrientationChangedメソッドで行う必要があることを実行してください。

クラスをインスタンス化するときは、明らかにコンストラクタにコンテキストを渡してから、オブジェクトのenable()を呼び出してください。

唯一の欠点は、単なる人物またはランドスケープではなく、正確な回転角度です。しかし、ちょっとしたデバッグと面白いif/thenステートメントを使って、それらの数値の範囲を把握することができます。デバイスの向きが変更されたときに呼び出され

:ここ

は、ドキュメントから役に立つヒントです。 orientation パラメータは、その左側が上にあるとき、それは逆さま である場合、デバイスはその天然の位置に配向されたときに0から359までorientationの範囲は0 度で、度で180度90 度であり、そして右側が上になると270度になります。デバイスがフラットに近く、 の方向を特定できない場合は、 ORIENTATION_UNKNOWNが返されます。

ドキュメントはhereです。

希望すると便利です。

+0

また、これは後の返信ですが、私はそれがこの時点からそれを必要とするなら、それはまだ誰かのために役立つだろうと思った。 – Qix

+0

はい、これは正常に動作しているようです。 – inazaruk