Edytowane pytanie:
Rozdzielczość mobilna:
Chciałbym zaprojektować różne rozdzielczości ekranu, takie jak poniższe rozdzielczości.
320x480,
480 × 800,
540x960,
720x1280 (Samsung S3),
1080x1920 (S4, Nexus5, Nexus 5x, Moto G4),
2560 x 1440 (Nexus 6, Nexus 6p, Samsung edge)
Rozdzielczość tabletu:
480x800 (micromax),
600x1024 ( samsung tab2),
800x1280 (nexus 7),
1200x1920 (nowy nexus 7),
2048x1536 (nexus 9)
Chcę używać różnych rozmiarów czcionek w zależności od rozdzielczości wyświetlacza urządzenia.
P1) Jaki jest best
sposób rozwiązania tego problemu problem
?
Q2) Jaka jest najlepsza opcja do kodowania rzutowego lub XML?
Q3) Który folder do rysowania reprezentuje rozdzielczość urządzenia?
Q4) Rozmiar ikony programu uruchamiającego aplikacje dla innej rozdzielczości?
źródło
Odpowiedzi:
Rozmiar ikony menu z aplikacjami w pikselach dla różnych rozdzielczości
Rozdzielczość mobilna
Układy tabletu:
Użyj następujących folderów, jeśli chcesz mieć układy specyficzne dla tabletu:
layout-large-mdpi (1024x600) layout-large-tvdpi (800x1280) layout-large-xhdpi (1200x1920) layout-xlarge-mdpi (1280x800) layout-xlarge-xhdpi (2560x1600)
Foldery do rysowania:
mobilny
res/drawable (default) res/drawable-ldpi/ (240x320 and nearer resolution) res/drawable-mdpi/ (320x480 and nearer resolution) res/drawable-hdpi/ (480x800, 540x960 and nearer resolution) res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc) res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc) res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge).
Rozdzielczość tabletu:
Rozmiary czcionek:
Użyj predefiniowanych
textAppearance
:Ustawi rozmiar tekstu automatycznie zgodnie z gęstością urządzenia.
<TextView android:textAppearance="?android:attr/textAppearanceSmall"/> <TextView android:textAppearance="?android:attr/textAppearanceMedium"/> <TextView android:textAppearance="?android:attr/textAppearanceLarge" />
Przykładowe użycie:
<TextView style="@android:style/TextAppearance.Small" android:text="Sample Text - Small" /> <TextView style="@android:style/TextAppearance.Medium" android:text="Sample Text - Medium" /> <TextView style="@android:style/TextAppearance.Large" android:text="Sample Text - Large" />
Użyj
dimension.xml
dla każdego urządzenia:Z Google IO Pdf widzimy strukturę poniżej:
Mobilny:
res/values/dimens.xml(default) res/values-ldpi/dimens.xml (240x320 and nearer resolution) res/values-mdpi/dimens.xml (320x480 and nearer resolution) res/values-hdpi/dimens.xml (480x800, 540x960 and nearer resolution) res/values-xhdpi/dimens.xml (720x1280 - Samsung S3, Micromax Canvas HD, etc) res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)
Tablet:
Do tabletu można użyć bardziej konkretnego folderu podobnego
values-xlarge
,values-large
.res/values-large/dimens.xml (480x800) res/values-large-mdpi/dimens.xml (600x1024)
lub
res/values-sw600dp/dimens.xml (600x1024) res/values-sw720dp/dimens.xml (800x1280) res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10") res/values-large-xhdpi/dimens.xml (1200x1920 - Nexus 7"(latest))
Fragment z obsługi wielu ekranów :
źródło
Najpierw utwórz foldery z różnymi wartościami dla różnych ekranów i umieść rozmiar zgodnie z ekranami w
res->values->dimens.xml
pliku i wywołaj prosty rozmiar czcionki za pomocą"@dimen/text_size"
.res/values/dimens.xml res/values-small/dimens.xml res/values-normal/dimens.xml res/values-xlarge/dimens.xml //for small <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">15sp</dimen> </resources> //for normal <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">20sp</dimen> </resources> //for large <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">30sp</dimen> </resources> //for xlarge <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">40sp</dimen> </resources>
i pobierz rozmiar czcionki,
TextView
jak podano poniżej.<TextView android:id="@+id/lblHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/text_size" android:textStyle="bold" android:typeface="serif" />
źródło
Aby uniknąć problemów z różnymi rozdzielczościami ekranu i różnymi gęstościami, dopasowuję i ustawiam wszystko w oparciu o procentową szerokość i wysokość ekranu. Jeśli rozmiar tekstu zostanie zmieniony na podstawie procentowej szerokości lub wysokości ekranu, czcionka będzie miała prawidłowy rozmiar na wszystkich urządzeniach i we wszystkich rozdzielczościach. Aby uzyskać prawidłowy rozmiar czcionki na podstawie szerokości i wysokości jej przestrzeni, po prostu użyj tej funkcji:
private float SetTextSize(String text, int width, int height) { Paint paint = new Paint(); float textWidth = paint.measureText(text); float textSize = (int) ((width / textWidth) * paint.getTextSize()); paint.setTextSize(textSize); textWidth = paint.measureText(text); textSize = (int) ((width / textWidth) * paint.getTextSize()); // Re-measure with font size near our desired result paint.setTextSize(textSize); // Check height constraints FontMetricsInt metrics = paint.getFontMetricsInt(); float textHeight = metrics.descent - metrics.ascent; if (textHeight > height) { textSize = (int) (textSize * (height / textHeight)); paint.setTextSize(textSize); } return textSize; }
Oto kod, aby uzyskać szerokość i wysokość ekranu:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { Point size = new Point(); getWindowManager().getDefaultDisplay().getSize(size); screenWidth = size.x; screenHeight = size.y; } else { Display display = getWindowManager().getDefaultDisplay(); screenWidth = display.getWidth(); screenHeight = display.getHeight(); }
Aby uzyskać żądany rozmiar czcionki, po prostu utwórz obszar na podstawie szerokości i wysokości ekranu i dostosuj go, aż rozmiar czcionki będzie wyglądał prawidłowo. Gdy sprawisz, że będzie dobrze wyglądał, powinien wyglądać dobrze na wszystkich urządzeniach.
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));
mam nadzieję, że to Ci pomoże
źródło
sqrt(phoneWidthInches / defaultWidthInches)
, gdziedefaultWidthInches
jest oryginalny rozmiar telefonu, dla którego projektujesz. Tak więc 2x większy telefon będzie miał 1,4x większą czcionkę. (zamiast tego użyj odpowiedniego wzoruheight
lubdiagonal
). Ważne : NIE UŻYWAJ szerokości w pikselach .inches = pixels / dpi
.Zasadniczo musisz utworzyć styl tekstu podobny do tego:
<style name="CodeFont"> <item name="android:textSize">30sp</item> </style>
Przeczytaj więcej na ten temat tutaj http://developer.android.com/guide/topics/ui/themes.html
Korzystając z przewodnika obsługi Androida dla różnych ekranów, aby utworzyć różne rozmiary dla różnych ekranów w odpowiednich folderach res, jak opisano w: http://developer.android.com/guide/practices/screens_support.html
Uwaga dodatkowa: nie bardzo rozumiem, w jakiej sytuacji chciałbyś to zrobić, użycie jednostek SP dla rozmiarów czcionek spowoduje skalowanie czcionek, aby wyglądały mniej więcej tego samego rozmiaru na różnych telefonach.
źródło
Najpierw projekt aplikacji dla jednej rozdzielczości.
przykład: załóżmy, że rozdzielczość telefonu komórkowego to 380 * 480
mobile screen width:380 textView size is 80dp Assume : if width is 380dp then 100 % then textview width 80dp then how many %(per). ower answer is: 25 %
znaleźć rozmiar ekranu programowo, używając wzoru Belove
DisplayMetric displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); ScreenHeight = displaymetrics.heightPixels; ScreenWidth = displaymetrics.widthPixels; txt_height = (int)((ScreenHeight*14.58)/100); txt_width = (int)((ScreenWidth*37.5)/100); LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width ); txt_Name.setLayoutParams(normal_param);
źródło
Myślę, że to dobra odpowiedź:
Rozmiar tekstu i różne rozmiary ekranu Androida
Ale tutaj, jak możesz to zrobić z rozdzielczością ekranu:
Możesz utworzyć katalog zasobów „wartości” dla każdego rozwiązania, na przykład
values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp) for example: 320*480 will be values-w320p-h480dp
W każdym katalogu (włączając wartości domyślne dir) utwórz plik o nazwie „dimens.xml” z zawartością:
for exmaple (the value related to the resolution): <dimen name="def_font_size">10sp</dimen>
Teraz możesz użyć "@ dimen / def_font_size" lub stworzyć styl w katalogu wartości domyślnych.
Dodaj to do „styles.xml”:
<style name="FontSize"> <item name="android:textSize">@dimen/def_font_size</item> </style>
źródło
Stworzyłem funkcję, która konwertuje rozmiar dp na rozmiar zgodnie z rozmiarem ekranu i działa dobrze dla mnie. Każdy, kto ma problem z rozmiarem tekstu zgodnie z ekranem, powinien spróbować.
public float convertFromDp(int input) { final float scale = getResources().getDisplayMetrics().density; return ((input - 0.5f) / scale); }
simple podaj wartość nadaną przez niego rozmiarowi widoku tekstu programowo, jak poniżej
tvTextView1.setTextSize(convertFromDp(24));
źródło
Aby zapewnić obsługę urządzenia Nexus 6, utwórz folder drawable-560dpi i umieść w nim wszystkie obrazy.
źródło