5

Androidアプリケーションのマニフェストファイルで向きの変更を制限できることは知っていますが、デバイスの種類/サイズに応じてそれを行う方法があるかどうか疑問に思いました。

小型/中型の携帯電話では防止したいのですが、大型の携帯電話/タブレットでは許可します。

それを達成するための最良の方法は何ですか?どんな助けでも大歓迎です。

4

5 に答える 5

6

そのためには、2つを1つにまとめる必要があると思います。

  1. まず、デバイスの画面サイズを取得します
  2. 次に、結果に基づいて、方向付けを有効または無効にします。

最初の部分:

int screenSize = getResources().getConfiguration().screenLayout &
        Configuration.SCREENLAYOUT_SIZE_MASK;

switch(screenSize) {
    case Configuration.SCREENLAYOUT_SIZE_LARGE:
        Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show();
        break;
    case Configuration.SCREENLAYOUT_SIZE_NORMAL:
        Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show();
        break;
    case Configuration.SCREENLAYOUT_SIZE_SMALL:
        Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show();
        break;
    default:
        Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();
}

クレジット:https ://stackoverflow.com/a/11252278/450534 (ソリューションはSOですぐに利用可能でした

そして最後に、上記のコードの結果に基づいて、次のいずれかを実行します。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

また

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
于 2013-02-24T14:21:27.457 に答える
1

まあ、私は間違っているかもしれませんが、私が知る限り、これを直接行う方法はありません。

プログラムで画面サイズを確認し、それに基づいて向きの変更を許可または禁止する必要があります。

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{     
    // screen is large.. allow orientation changes
}

else
{
       //restrict orientation 
}
于 2013-02-24T14:20:01.003 に答える
0

アクティビティ中に、使用しているデバイスサイズを確認し、メソッド(またはそのサイズに必要な方向)をonCreate呼び出すことができます。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

アクティビティが要求されたオリエンテーションにない場合、そのアクティビティは新しく作成されたものを破棄することに注意してください。

于 2013-02-24T14:21:27.097 に答える
0

コードの画面サイズを確認して、次のことを決定します

setRequestedOrientation();

か否か

于 2013-02-24T14:21:27.190 に答える
0

onConfigurationChanged(Configuration newConfig)public voidを上書きし、密度と画面サイズをチェックするための独自のロジックを作成する必要があります。

しかし、注意してください..それは良い習慣ではありません。

于 2013-02-24T14:23:58.500 に答える