Szukaj…


Uwagi

Warunki i pojęcia

Rozmiar ekranu

Rzeczywisty rozmiar fizyczny, mierzony jako przekątna ekranu. Dla uproszczenia system Android grupuje wszystkie rzeczywiste rozmiary ekranu na cztery ogólne rozmiary: mały, normalny, duży i bardzo duży.

Gęstość ekranu

Ilość pikseli w fizycznym obszarze ekranu; zwykle określane jako dpi (kropki na cal). Na przykład ekran o „niskiej” gęstości ma mniej pikseli w danym obszarze fizycznym, w porównaniu do ekranu o „normalnej” lub „wysokiej” gęstości. Dla uproszczenia system Android grupuje wszystkie rzeczywiste gęstości ekranu na sześć ogólnych gęstości: niska, średnia, wysoka, bardzo wysoka, bardzo wysoka i bardzo wysoka.

Orientacja

Orientacja ekranu z punktu widzenia użytkownika. Jest to krajobraz lub portret, co oznacza, że proporcje ekranu są odpowiednio szerokie lub wysokie. Należy pamiętać, że nie tylko różne urządzenia domyślnie działają w różnych orientacjach, ale orientacja może się zmienić w czasie wykonywania, gdy użytkownik obraca urządzenie. Rozdzielczość Całkowita liczba fizycznych pikseli na ekranie. Podczas dodawania obsługi wielu ekranów aplikacje nie działają bezpośrednio z rozdzielczością; aplikacje powinny dotyczyć wyłącznie rozmiaru i gęstości ekranu, określonych przez ogólne grupy wielkości i gęstości. Piksel niezależny od gęstości (dp) Wirtualna jednostka pikseli, której należy użyć podczas definiowania układu interfejsu użytkownika, aby wyrazić wymiary lub pozycję układu w sposób niezależny od gęstości. Piksel niezależny od gęstości odpowiada jednemu pikselowi fizycznemu na ekranie o rozdzielczości 160 dpi, który jest podstawową gęstością przyjętą przez system dla ekranu o „średniej” gęstości. W czasie wykonywania system w przejrzysty sposób obsługuje dowolne skalowanie jednostek dp, zależnie od rzeczywistej gęstości używanego ekranu. Konwersja jednostek dp na piksele ekranowe jest prosta: px = dp * (dpi / 160). Na przykład na ekranie o rozdzielczości 240 dpi 1 dp to 1,5 piksela fizycznego. Podczas definiowania interfejsu użytkownika aplikacji należy zawsze używać jednostek dp, aby zapewnić prawidłowe wyświetlanie interfejsu użytkownika na ekranach o różnych gęstościach.


Jednostki

  • px

    Piksele - odpowiada rzeczywistym pikselom na ekranie.

  • w

    Cale - w oparciu o fizyczny rozmiar ekranu. 1 cal = 2,54 centymetra

  • mm

    Milimetry - w oparciu o fizyczny rozmiar ekranu.

  • pt

    Punkty - 1/72 cala w oparciu o fizyczny rozmiar ekranu.

  • dp lub dip

    Piksele niezależne od gęstości - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Jednostki te odnoszą się do ekranu o rozdzielczości 160 dpi, więc jeden dp to jeden piksel na ekranie o rozdzielczości 160 dpi. Stosunek dp-do piksela zmienia się wraz z gęstością ekranu, ale niekoniecznie w proporcji bezpośredniej. Uwaga: Kompilator akceptuje zarówno „dip”, jak i „dp”, chociaż „dp” jest bardziej spójny z „sp”.

  • sp. z oo

    Piksele niezależne od skali - jest to jak jednostka dp, ale jest również skalowane według preferencji użytkownika dotyczących rozmiaru czcionki. Zaleca się korzystanie z tego urządzenia podczas określania rozmiarów czcionek, aby dopasować je zarówno do gęstości ekranu, jak i preferencji użytkownika. Od zrozumienia niezależności gęstości w Androidzie:


Jednostka Opis Jednostki na cal fizyczny Niezależność od gęstości Ten sam rozmiar fizyczny na każdym ekranie
px Piksele Różni się Nie Nie
w Cale 1 tak tak
mm Milimetry 25,4 tak tak
pt Zwrotnica 72 tak tak
dp Niezależne piksele ~ 160 tak Nie
sp. z oo Skaluj niezależne piksele ~ 160 tak Nie

Bibliografia:

Korzystanie z kwalifikatorów konfiguracji

Android obsługuje kilka kwalifikatorów konfiguracji, które pozwalają kontrolować, w jaki sposób system wybiera alternatywne zasoby w oparciu o charakterystykę bieżącego ekranu urządzenia. Kwalifikator konfiguracji to ciąg, który można dołączyć do katalogu zasobów w projekcie Android i określa konfigurację, dla której zaprojektowane są zasoby.

Aby użyć kwalifikatora konfiguracji:

  1. Utwórz nowy katalog w katalogu res / projektu i nazwij go w formacie: <resources_name>-<qualifier> . <resources_name> nazwa_zasobu <resources_name> to standardowa nazwa zasobu (na przykład rysowana lub układ).
  2. <qualifier> to kwalifikator konfiguracji, określający konfigurację ekranu, dla której mają być używane te zasoby (takie jak hdpi lub xlarge).

Na przykład następujące katalogi zasobów aplikacji zapewniają różne projekty układu dla różnych rozmiarów ekranu i różnych rysunków. Użyj mipmap/ folderów dla ikon programu uruchamiającego.

res/layout/my_layout.xml              // layout for normal screen size ("default")
res/layout-large/my_layout.xml        // layout for large screen size
res/layout-xlarge/my_layout.xml       // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml  // layout for extra-large in landscape orientation

res/drawable-mdpi/graphic.png         // bitmap for medium-density
res/drawable-hdpi/graphic.png         // bitmap for high-density
res/drawable-xhdpi/graphic.png        // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png       // bitmap for extra-extra-high-density

res/mipmap-mdpi/my_icon.png         // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png         // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png        // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png       // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png      // launcher icon for extra-extra-extra-high-density

Konwersja dp i sp na piksele

Jeśli chcesz ustawić wartość piksela dla czegoś takiego jak Paint.setTextSize ale nadal chcesz skalować ją w zależności od urządzenia, możesz przekonwertować wartości dp i sp.

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12f, metrics);

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, metrics);

Alternatywnie możesz przekonwertować zasób wymiaru na piksele, jeśli masz kontekst, z którego można załadować zasób.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="size_in_sp">12sp</dimen>
    <dimen name="size_in_dp">12dp</dimen>
</resources>

// Get the exact dimension specified by the resource
float pixels = context.getResources().getDimension(R.dimen.size_in_sp);
float pixels = context.getResources().getDimension(R.dimen.size_in_dp);

// Get the dimension specified by the resource for use as a size.
// The value is rounded down to the nearest integer but is at least 1px.
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_dp);

// Get the dimension specified by the resource for use as an offset.
// The value is rounded down to the nearest integer and can be 0px.
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_dp);

Rozmiar tekstu i różne rozmiary ekranu Androida

Czasami lepiej mieć tylko trzy opcje

 style="@android:style/TextAppearance.Small"
 style="@android:style/TextAppearance.Medium"
 style="@android:style/TextAppearance.Large"

Użyj małych i dużych, aby odróżnić się od normalnego rozmiaru ekranu.

<TextView
        android:id="@+id/TextViewTopBarTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/TextAppearance.Small"/>

Normalnie nic nie musisz określać.

<TextView
        android:id="@+id/TextViewTopBarTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

Dzięki temu możesz uniknąć testowania i określania wymiarów dla różnych rozmiarów ekranu.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow