1

「ランドスケープ」モードでは、1 つのアクティビティによって制御され、2 つのフラグメントを利用する 2 つの FrameLayout があります。「ポートレート」モードでは、1 つのアクティビティによって制御される 1 つの FrameLayout があり、線の選択時に別のアクティビティを呼び出して、詳細フラグメントを使用して詳細を表示します。

「Portrait」詳細アクティビティでは、onCreate() メソッドで方向を次のようにチェックします。

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 終了(); 戻る; }

上記はうまくいきますが、

ただし、「小さい」デバイスを使用している場合に問題が発生します。この場合、「横」モードでは、2 つのフラグメント ビューは必要なく、「縦」ビューのように動作させたいと考えています。ただし、詳細アクティビティが起動されると、デバイスは実際には「横向き」になっているため、自動的に終了します。

質問は、これを処理する最良の方法は何ですか?

4

2 に答える 2

1

または bool 値を持つカスタム リソースを作成します (google io 2012 から)

<!-- in your values/custom.xml -->
<resources>
    <bool name="small_screen">true</bool>  
    <bool name="normal_screen">false</bool>  
</resources>

<!-- in your values-sw320dp/custom.xml -->
<resources>
    <bool name="small_screen">false</bool>  
    <bool name="normal_screen">true</bool>
</resources>

注:画面が小さくないと見なされる最小画面幅(sw320dp)を定義する必要があります(詳細情報へのリンク

利点は、実行時にこの値を読み取ることができ、特別なリソース修飾子の特別なケースを持つことができることです...たとえば、アクティビティを呼び出すことで、実行時にこの値を読み取ることができます。

if(getResources().getBoolean(R.bool.small_screen)) {
    // You have a screen which is < 320dp
} else {
    // You have a screen which is >= 320dp
}

マニフェストでこのブール値リソースを使用して、小さな画面でまったく異なるアクティビティを開始することもできます

<activity android:name="SmallScreenActivity" 
          android:enabled="@bool/small_screen">  <!-- ENABLE FOR SMALL SCREEN -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name="NormalActivity" 
          android:enabled="@bool/normal_screen"> <!-- ENABLE FOR OTHER -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

このようにして、通常のケース (android:enabled="@bool/normal_screen") にアクティビティを使用し、小さな画面の android:enabled="@bool/small_screen" に特別なアクティビティを使用することができます。

警告: この方法は、ハニカム以降の新しいデバイスでは機能しません。 このメソッドが許可されなくなった理由を読むか、同様のソリューションの動作について読むことができます

于 2012-09-20T14:06:43.053 に答える
0

向きを確認する前に、画面サイズを追加で確認してください。幅 500 ピクセル、高さ 600 ピクセルの小さなデバイスを考えると、次のようになります。

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); i
int width = size.x; 
int height = size.y;
if ( width > 500 && height > 600 && 
    getResources().getConfiguration().orientation == 
    Configuration.ORIENTATION_LANDSCAPE)
{ 
     finish(); 
     return; 
}
于 2012-09-20T13:46:06.193 に答える