2017-02-21 4 views
0

携帯電話サイズのレイアウトでアプリ全体の向きをポートレートのみにロックしようとしていますが、タブレットサイズのレイアウトでポートレートとランドスケープの両方を許可します。Xamarin Androidの携帯電話のポートレートへの向きを固定

アクティビティが特定の方向を使用すると判断できますが、これは両方のレイアウトサイズに適用されます。

[Activity(
     Label = "Brs.Members.Droid" 
     , MainLauncher = true 
     , Icon = "@mipmap/icon" 
     , Theme = "@style/Theme.Splash" 
     , NoHistory = true 
     , ScreenOrientation = ScreenOrientation.Portrait)] 
    public class SplashScreen : MvxSplashScreenActivity 
    { 
     public SplashScreen() : base(Resource.Layout.SplashScreen) 
     { 
     } 
    } 

携帯電話のサイズのデバイスでのみランドスケープレイアウトを除外する方法はありますか?

答えて

0

まず、デバイスがタブレットであるかどうかを確認し、実行時に向きをポートレートにロックします。ここで

は、デバイスが錠剤であるかどうかを判断するために便利な郵便ポストです:だからここ
Determine if the device is a smartphone or tablet?

は、あなたが何ができるかです:

  1. は、最小の修飾子と値リソースファイルを作成します。画面の幅は600dpに等しい。 (画面サイズ修飾子なしで)正常値ファイル内で次に

    <resources> 
        <bool name="isTablet">true</bool> 
    </resources> 
    

    falseにisTabletの値を設定します:ファイルインサイド(sw600dp)

    はtrueにisTabletのブール値を設定し

    <resources> 
        <bool name="isTablet">false</bool> 
    </resources> 
    
  2. その後のonCreateでisTablet値を取得し、それに応じて向きを設定:

    boolean isTablet = getResources().getBoolean(R.bool.isTablet); 
    if (!isTablet) { 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
    
+0

これは望ましい解決策のように思えるが、私は、リンクされた質問から詳細を追加することを示唆しています。 –

+0

ありがとうございます、編集を確認してください。 –

3

は、それが最初のタブレットであれば、あなたのデバイスを確認し、以下のコードを試してみて、その後、方向を設定します。

[Activity(Label = "MyOrientationDemo", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     if (!isPad(this)) 
     { 
      RequestedOrientation = ScreenOrientation.Portrait; 
     } 
     SetContentView (Resource.Layout.Main); 
    } 

    public static bool isPad(Context context) 
    { 
     return (context.Resources.Configuration.ScreenLayout& ScreenLayout.SizeMask)>= ScreenLayout.SizeLarge; 
    } 
}