2

コードで7インチのタブレット(Kindle Fire&Nook Colorなど)を検出しようとしています。ただし、Galaxy Nexusもこのテストに合格するため、1024x600の最小サイズをテストするだけでは不十分です。これを検出した経験がある人は誰でもどんな情報?

ありがとう、イゴール

編集: 次のコードでKindle Fire&NookColorデバイスを検出する1つの方法を見つけました:

Activity activity = (Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = activity.getWindowManager().getDefaultDisplay().getWidth();
int height = activity.getWindowManager().getDefaultDisplay().getHeight();
if ((width == 1024 && height == 600) || (width == 600 && height == 1024)) {    
        //Detects 7" tablets: i.e. Kindle Fire & Nook Color
        isTablet = true;
    }
4

4 に答える 4

5

デバイスの高さと幅(インチ単位)を計算するには、次のコードを使用できます。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

float widthInInches = metrics.widthPixels / metrics.xdpi;
float heightInInches = metrics.heightPixels / metrics.ydpi;

次に、サイズを計算できます

double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) + Math.pow(heightInInches, 2));
//0.5" buffer for 7" devices
boolean is7inchTablet = sizeInInches >= 6.5 && sizeInInches <= 7.5; 

上記のCommonswareの提案によると、実装は潜在的に高速ですが、あまり明白ではありません。

double sizeInInchesSquared = (widthInInches * widthInInches) + (heightInInches * heightInInches);
//0.5" buffer for 7" devices (6.5^2 = 42.25) (7.5^2 = 56.25)
boolean is7inchTablet = sizeInInchesSquared >= 42.25 && sizeInInchesSquared <= 56.25; 
于 2012-05-23T16:52:12.467 に答える
1

寸法ではなく、気になるタブレットの場合、具体的には、モデルや製品などを伝えることができるBuildクラスがあります。

于 2012-05-23T16:49:24.883 に答える
1

以下を参照してください。すべてのデバイスで機能するとは限らないようです。心配しているデバイスが2つのタブレットだけの場合は、どちらかの実装を試してみます。

https://stackoverflow.com/a/10080537/300972

https://groups.google.com/group/android-developers/browse_thread/thread/cae5ff90157098b1?pli=1

于 2012-05-23T16:50:18.487 に答える
1

私はそれが古いスレッドであることを知っていますが、この方法はどうですか?

public boolean isLargeScreen() {

    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.device_screen, null);
    FrameLayout menu = (FrameLayout) view.findViewById(R.id.menu);


    if (left_menu != null) {
        return true;
    } else {
        return false;
    }
}

それから:

if ( isLargeScreen() ) {
    // do something for large screen & extra large screen
} else {
    // do something for normal screen size
}

およびxmlレイアウト(たとえば):

res / layout / device_screen.xml //通常の画面サイズのレイアウト(「デフォルト」)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    [leave it blank]

</LinearLayout>

res / layout-large /device_screen.xml//大画面サイズのタブレットのレイアウト7'

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/menu"
        ... />

</LinearLayout>

res / layout-xlarge /device_screen.xml//特大画面サイズのレイアウト>タブレット10 '

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/menu"
        ... />

</LinearLayout>

HTCDesireとSamsungGalaxyNote 10.1でテスト済み-うまく機能します!

于 2013-02-12T23:14:06.560 に答える