odpowiedź miejski
@Devunwired wymienia 3 powody, aby używać dimens.xml
. Oto szczegóły, jak to zrobić.
1. Ponowne
Jeśli ustawisz jakiś dp
lub sp
wartość w dimens.xml
raz jak ten
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_padding">16dp</dimen>
<dimen name="large_text_size">30sp</dimen>
</resources>
można używać go w całej aplikacji w wielu lokalizacjach.
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
Następnie, gdy trzeba dokonać zmiany, wystarczy zrobić to w jednym miejscu.
Uwagi
- To jest w zasadzie taki sam efekt, jak przy użyciu stylu lub motywu.
- Uważaj, aby nie podawać dwóch różnych widoków tej samej wartości
dimen
, jeśli naprawdę nie powinny być.Jeśli chcesz dokonać zmian w jednym zestawie widoków, ale nie w innym, będziesz musiał wrócić do każdego z osobna, co zniszczy cel.
2. Rozmiar Różnica
- @Devunwired nazywa tę różnicę Density, ale jeśli używasz
dp
(gęstość niezależnych pikseli), to już trwa opieki są problemem różnicy gęstości dla wszystkich, ale najbardziej pomniejsze przypadki. Tak więc, moim zdaniem, rozmiar ekranu jest ważniejszym czynnikiem dla używania dimens.xml
.
8dp
wyściółka może wyglądać świetnie na telefon, ale gdy aplikacja zostanie uruchomiona na tablecie, wygląda zbyt wąskie. Możesz rozwiązać ten problem, tworząc dwie (lub więcej) różne wersje dimens.xml
.
Kliknij prawym przyciskiem myszy folder res
i wybierz opcję Nowy> Plik zasobów wartości. Następnie napisz w dimens
i wybierz Najmniejsza szerokość ekranu. Napisz w dla szerokości (tablet 7 "). (Istnieją inne sposoby doboru rozmiarów. Zobacz documentation i this answer więcej.)
To uczyni kolejny values
folder, który będzie używany do urządzeń, których szerokość jest najmniejszy ekran 600dp
. W widoku systemu Android dwa pliki dimens.xml
wyglądają tak:
Teraz można zmodyfikować je niezależnie.
wartości/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
Wartości-sw600dp/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">64dp</dimen>
</resources>
podczas korzystania z dimen
trzeba tylko ustawić go z nazwą użytego w oba pliki dimens.xml
.
<LinearLayout
...
android:padding="@dimen/my_default_padding">
</LinearLayout>
System automatycznie wybierze odpowiednią wartość w zależności od urządzenia, z którego korzysta użytkownik.
3. Czytanie z kodem
Czasem jest to ból skalowania programowego między px
i dp
(patrz this answer dla how).
Jeśli masz stałe dp
wartość już zdefiniowany w dimens.xml
jak ten
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
Następnie można łatwo dostać go z
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);
i będzie on już być konwertowane na piksele z jakiegokolwiek urządzenia gęstości użytkownik ma.
O # 2, jak rozróżniasz to w pliku 'dimens.xml' (podaj przykład, jeśli to możliwe)? Powód 3 jest bardzo przekonujący. –
@Nazgulled wiele plików w kwalifikowanych katalogach. Na przykład umieszczenie 'dimens.xml' w' res/values' dla wartości domyślnych i innego w 'res/values-ldpi', które obejmuje kilka, które chcę przesłonić dla urządzeń o niskiej gęstości. – Devunwired
Chociaż to było dostępne tylko dla folderu z rysunkami. Dzięki za wskazówkę. –