5

res/values の XML ファイルの値を使用して、アクティビティ画面の向きを設定しようとしています。多かれ少なかれ、タブレット(横向き)とスマートフォン(縦向き)の両方に同じアクティビティが必要なので、私はそれをしたいと思います。

初挑戦

マニフェスト:

<activity android:name="..." android:screenOrientation="@string/defaultOrientation"/>

config.xml:

<string name="defaultOrientation">portrait</string>

ただし、この設定ではアプリケーションはデバイスに表示されず、次のエラーが返されます。

java.lang.NumberFormatException: 無効な int: "portrait"

2番

わかりましたので、これに変更しました

マニフェスト:

<activity android:name="..." android:screenOrientation="@integer/defaultOrientation"/>

config.xml:

<integer name="defaultOrientation">1</integer>

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT == 1 であるため、1 を使用しました。

しかし、これも機能していません。アプリケーション/アクティビティ名などのいくつかの値を変更できるようですが、画面の向きは変更できませんか?

コードで回避できることはわかっていますが、何らかの理由で、これも XML 値ファイルで取得できるはずだと感じています。

XML値でそれを達成することは何とか可能ですか?

4

1 に答える 1

4

あなたの2番目の説明で私にとって同じ問題があり、あなたが探していないコードによる回避策を使用しました。

res フォルダーの下に 4 つの値フォルダーを追加しました。「values」、「values-v11」、「values-v14」、および「values-sw720dp」

すべての値フォルダーには「integers.xml」があります。

「values」と「values-v14」の値は 1 で、縦向きです。
<integer name="portrait_if_not_tablet">1</integer>.

「values-v11」と「values-sw720dp」の値は 2 で、これはユーザーの向きです。
<integer name="portrait_if_not_tablet">2</integer>.

そしてマニフェストファイルでは、アクティビティには次のようなプロパティがあります。
android:screenOrientation="@integer/portrait_if_not_tablet".

すべての「values」、「values-v11」、「values-v14」は期待どおりに機能していますが、「values-sw720dp」です!

デバッグ中に、portrait_if_not_tablet の値が getResources().getInteger(R.integer.portrait_if_not_tablet) を使用して sw720dp デバイス (API 16 を使用) で期待どおりになることに気付きましたが、getRequestedOrientation() によって現在の方向の値を確認すると、別の結果が得られました価値。

int requestedOrientation = getResources().getInteger(R.integer.portrait_if_not_tablet);
int currentOrientation = getRequestedOrientation();
if (currentOrientation != requestedOrientation) {
    setRequestedOrientation(requestedOrientation);
}

そこで、これを解決するために、アクティビティの onCreate メソッドでコード ブロックを使用しました。

于 2013-03-17T16:43:43.147 に答える