3

与えられたデバイスがAndroidのタブレットまたは電話であるかどうかを検出したいのですが、シミュレーターで2つを試しましたが、どれも機能しませんでした。両方ともここにあります:

初め

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{
    //code
}

2番

    private boolean isTabletDevice() 
{         
    if (android.os.Build.VERSION.SDK_INT >= 11) 
    { 
    // honeycomb                    
    // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11     
    Configuration con = getResources().getConfiguration();              
    try {                     
            Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast");    
            Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE    
            return r;              
        } catch (Exception x)
        {    
            return false;          
        }             
    }            
    return false;                   
}
4

4 に答える 4

7

このコードを試してください。画面のインチを取得できます

    String inputSystem;
    inputSystem = android.os.Build.ID;
    Log.d("hai",inputSystem);
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();  // deprecated
    int height = display.getHeight();  // deprecated
    Log.d("hai",width+"");
    Log.d("hai",height+"");
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(width/dm.xdpi,2);
    double y = Math.pow(height/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("hai","Screen inches : " + screenInches+"");
于 2012-03-27T06:47:02.967 に答える
6

このlayoutlayout_xlargeのように、 resフォルダーに2つのレイアウトフォルダーを作成します。layout-xlargeファイルに不要なビューを1つ作成します。この不要なビューIDをプログラムで取得します。nullポインター例外が発生した場合、コード内の不要なIDにアクセスしてブロックをキャッチしてください。デバイスそれ以外の場合はタブレットです。もう 1 つのことは、layout-xlarge 画面で不要なビューを非表示にします。

于 2012-03-27T06:46:02.187 に答える
2

最初に答える質問は、「電話」または「タブレット」の意味だと思います。私たちの頭の中にはいくつかの区別があるかもしれませんが、実際には、アプリケーションは気にする必要はありません。Asus Transformer はタブレット、Samsung Galaxy Nexus はスマートフォンです。Samsung Galaxy Noteとは何ですか? Engadget などはこれを「ファブレット」と呼んでいます。その場合、アプリケーションは何を想定すればよいでしょうか?

「タブレット」の定義は、SIM カードを持たないデバイスですか? SIM カードが組み込まれているタブレットが多数あるため、これも誤った定義です。「タブレット」の定義は、デフォルトで横向きモードになり、縦向きモードに回転するデバイスですか? おそらくそれは1つのアプローチですが、デフォルトで縦向き、またはさらに悪いことに、将来的に正方形のフォームファクタを持つタブレットが存在する可能性があるため、それで十分であるとは思えません.

私の意見では、これを処理する最善の方法は、Android のガイドラインを使用して UI レイアウトをオンにすることです。タブレットと携帯電話の明確な定義があり、絶対にどちらかを検出する必要があると思われる場合は、ブラウザーのユーザー エージェント文字列からモデル名を抽出し、それをタブレットの名前のデータベースと照合するなどの操作を行う必要があります。あなたが維持すること。知っている。うん。

于 2012-03-27T07:26:33.450 に答える
0

このメソッドを onResume() に配置して確認できます。

public double tabletSize() {

     double size = 0;
        try {

            // Compute screen size

            DisplayMetrics dm = context.getResources().getDisplayMetrics();

            float screenWidth  = dm.widthPixels / dm.xdpi;

            float screenHeight = dm.heightPixels / dm.ydpi;

            size = Math.sqrt(Math.pow(screenWidth, 2) +

                                 Math.pow(screenHeight, 2));

        } catch(Throwable t) {

        }

        return size;

    }

通常、タブレットは 6 インチ サイズ以降から始まります。

于 2013-03-27T07:27:08.580 に答える