2014-10-23 28 views
10

mam 4 różnych urządzeń:Jak poznać najmniejszą szerokość (sw) urządzenia z Androidem?

  1. Asus tabletkę ekranu telewizora 7"
  2. tabletki Lenovo ekranu telewizora 7"
  3. HTC komórkowego, ekranu telewizora 5"
  4. HTC komórkowego, ekranu telewizora 4.7"

Chcę poznać najmniejszą szerokość (sw) mojego urządzenia, aby utworzyć dla niego układ wsparcia.

Chcę utworzyć folder zasobów, taki jak "layout-sw600dp", ale nie znam wartości o najmniejszej szerokości (sw).

Próbowałem wydrukować SW użyciu tego kodu:

DisplayMetrics metrics = getResources().getDisplayMetrics(); 
Log.i("Density", ""+metrics.densityDpi); 

ale nie wiem, czy jest to poprawna wartość.

Jak znaleźć najmniejszą szerokość (sw)?

+0

Często nie trzeba wiedzieć, jak długo, jak zapewnić odpowiednie pliki zasobów. Zobacz [tę odpowiedź] (http://stackoverflow.com/a/41646301/3681880). – Suragch

Odpowiedz

8

można spróbować to:

DisplayMetrics dm = mActivity.getApplicationContext() 
        .getResources().getDisplayMetrics(); 
      float screenWidth = dm.widthPixels/dm.xdpi; 
      float screenHeight = dm.heightPixels/dm.ydpi; 

Dla Szczegóły: here

+0

Tak, możesz dowiedzieć się w czasie wykonywania, ale musisz skompilować folder przed kompilacją. więc jakie są wiadra dla sw, gdy chcesz użyć sw zamiast mdpi, hdpi i ...? – Kenji

+0

to nie zwróci SW. powinno to być 'screenWidth = dm.widthPixels /dm.density;' – VSB

8

Korekta do powyższej odpowiedzi, prawo kod, aby znaleźć prawidłowe sw spróbuj tego:

DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics(); 
float screenWidth = dm.widthPixels/dm.density; 
float screenHeight = dm.heightPixels/dm.density; 

która z tych wielkości Szerokość ekranu i wysokość ekranu jest mniejsza to twój SW.

+0

Wygląda na to, że jest to poprawna odpowiedź. Przyjęta odpowiedź daje mi 2,79 w uwadze 5. Notatka 5 pobiera wartości z mojego folderu sw360dp, więc nie może to być dokładny sposób określenia najmniejszej szerokości. Szkoda, że ​​Google nie ma formuły na oficjalnym dokumencie gdzieś tylko po to, by mnie uspokoić, zamiast sprawić, że przeczekać StackOverflow ... – welshk91

+0

Nie musimy pomnażać przez 160 jak px * 160)/dpi –

3

Min api 13 i powyżej iść z @Tobliug answer- najlepszym rozwiązaniem.

Configuration config = getResources().getConfiguration(); 
config.smallestScreenWidthDp;// But it requires API level 13 

Poniżej poziomu API 13 spróbować tę odpowiedź

Tworzenie SmallWidthCalculator.java klasa & wystarczy skopiować ten kod

wklej
import android.content.Context; 
import android.graphics.Point; 
import android.os.Build; 
import android.util.DisplayMetrics; 
import android.util.Log; 
import android.view.Display; 

public class SmallWidthCalculator { 
private static SmallWidthCalculator ourInstance = new SmallWidthCalculator(); 

public static SmallWidthCalculator getInstance() { 
    return ourInstance; 
} 

private Context mContext; 

private SmallWidthCalculator() { 
} 

public double getSmallWidth(Context context) { 
    mContext = context; 
    DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
    int width = dm.widthPixels; 
    int height = dm.heightPixels; 


    double dpi = getDPI(width, height); 


    double smallWidthDPI = 0; 
    int smallWidth = 0; 

    if (width < height) 
     smallWidth = width; 
    else 
     smallWidth = height; 

    smallWidthDPI = smallWidth/(dpi/160); 

    return smallWidthDPI; 
} 

private double getDPI(int width, 
         int height) { 
    double dpi = 0f; 
    double inches = getScreenSizeInInches(width, height); 
    dpi = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2))/inches; 
    return dpi; 
} 

private double getScreenSizeInInches(int width, int height) { 
    if (mContext != null) { 
     DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); 
     double wi = (double) width/(double) dm.xdpi; 
     double hi = (double) height/(double) dm.ydpi; 
     double x = Math.pow(wi, 2); 
     double y = Math.pow(hi, 2); 
     return Math.sqrt(x + y); 
    } 
    return 0; 
} 

} 

ze swojego działania lub fragment tylko zdać i dostać swój kontekst mała szerokość

double smallWidthDp=SmallWidthCalculator.getInstance().getSmallWidth(this); 
7

Oto kolejna prosta droga.

Można sprawdzić najmniejszą szerokość urządzenia z programistów opcje (w Android Studio Emulator & To nie znaleźć w moim rzeczywiste urządzenie).

enter image description here

+0

To działa na Androidzie 7+. – asym