2

過去数時間にわたっていくつかの調査と試行錯誤を行ってきましたが、この問題の完全に機能する解決策を見つけることができません. 画面サイズが十分に大きくない限り(タブレット)、Androidアプリケーションを縦向きモードに強制したいだけです。これにより、アプリが横向きモードになります。

私がこれまでに試したこと:

<activity android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden">

としても:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

私のonCreateとonResumeで。

最初の例はある程度機能しますが、タブレットの場合、画面サイズを確認して横向きモードを強制することはできません。さらに、asynctask の実行中に携帯電話を横向きにすると、アプリはタスクの完了後に横向きモードになり、縦向きと横向きを切り替えることができます。同じ活動。

それで、これを処理する適切な方法がわかりませんか?2 番目の例 (もう少しコードを使用すると、画面サイズを確認し、サイズに応じてレイアウトを選択できます) を使用すると、アクティビティにいる限り機能します。ただし、アクティビティを開始するときに携帯電話を横向きにすると、すべてがクラッシュします (そのため、最初はコードが効果的ではないようです)。

「バグ」なしで完全に機能する可能性のある提案は、現在の場合に非常に高く評価されます!

4

1 に答える 1

1

これは非常に遅いと思いますが、他の誰かを助けるかもしれない場合に備えて、ここに私の答えがあります.

私はプログラムによるルートをたどり、横向きまたは縦向きの位置でアプリを起動しても問題は発生しませんでした.

マニフェスト オプションを無視します。あなたが言及したように、 onCreate() で setRequestedOrientation() を使用してください。たとえば、画面サイズを確認します。

private boolean screenIsLarge()
{
    int screenMask = getResources().getConfiguration().screenLayout;
    if ( ( screenMask & Configuration.SCREENLAYOUT_SIZE_MASK) == 
            Configuration.SCREENLAYOUT_SIZE_LARGE) {
        return true;
    }

    if ( (screenMask & Configuration.SCREENLAYOUT_SIZE_MASK) == 
            Configuration.SCREENLAYOUT_SIZE_XLARGE) {
                return true;
    }

    return false;

}

これを変更して、 にリストされている他の画面サイズを含めることができますConfiguration。この結果に基づいて、画面を横向きにするかどうかを選択できます。

if( screenIsLarge() )
{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
于 2013-12-09T22:20:08.837 に答える