Wiem, omawiano to już 1000 razy, ale nie mogę dostosować rozmiaru tekstu do różnych rozmiarów ekranu. Próbuję użyć „sp” jako jednostek rozmiaru w moim niestandardowym stylu:
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
...
<item name="android:textSize">30sp</item>
...
</style>
W 2.7 QVGA wygląda dobrze:
Ale w 7-calowym WSVGA wygląda to tak:
Próbowałem użyć zarówno „sp”, jak i „dp” z tym samym wynikiem.
Czy mógłbyś wyjaśnić, jak sprawić, by te przyciski wyglądały tak samo na każdym ekranie?
W pełni niestandardowy styl przycisków
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/custom_button</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">3dp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:gravity">center</item>
<item name="android:textSize">30sp</item>
<item name="android:textStyle">bold</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">2</item>
</style>
I w moim motywie aplikacji mam
<item name="android:buttonStyle">@style/CustumButtonStyle</item>
A oto mój układ:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">
<Button
android:id="@+id/buttonContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/buttonNewGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonContinue"
android:layout_alignRight="@+id/buttonContinue"
android:layout_below="@+id/buttonContinue"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/ButtonAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonNewGame"
android:layout_alignRight="@+id/buttonNewGame"
android:layout_below="@+id/buttonNewGame"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
android
screen-size
text-size
forcelain
źródło
źródło
Odpowiedzi:
@forcelain Myślę, że musisz sprawdzić ten plik PDF Google IO for Design . W tym pliku pdf przejdź do strony nr: 77, na której znajdziesz sugestie użycia dimens.xml dla różnych urządzeń z Androidem. Przykład patrz poniższa struktura:
na przykład użyłeś poniżej dimens.xml w wartościach.
W folderze innych wartości musisz zmienić wartości rozmiaru tekstu.
Uwaga: jak wskazał @espinchi, małe, normalne, duże i xlarge zostały wycofane od wersji Androida 3.2 na rzecz następujących:
Deklarowanie układów tabletu dla systemu Android 3.2
źródło
Myślę, że jest już za późno, aby odpowiedzieć w tym wątku. Ale chciałbym podzielić się moim pomysłem lub sposobem rozwiązania problemu z rozmiarem tekstu na urządzeniach o różnej rozdzielczości. Wiele witryn programistów Androida sugeruje, że musimy użyć jednostki sp dla rozmiaru tekstu, która będzie obsługiwać rozmiar tekstu dla urządzeń o różnej rozdzielczości. Ale zawsze nie jestem w stanie osiągnąć pożądanego rezultatu. Znalazłem więc jedno rozwiązanie, którego używam z moich ostatnich 4-5 projektów i działa dobrze. Zgodnie z moją sugestią musisz ustawić rozmiar tekstu dla każdego urządzenia rozdzielczości, co jest trochę żmudną pracą, ale spełni twoje wymagania. Każdy programista musi słuchać o stosunku 4: 6: 8: 12 (odpowiednio: h: xh: xxh: xxxh) . Teraz w folderze res projektu musisz utworzyć 4 foldery z plikiem dimens np
Teraz w pliku dimens.xml musisz umieścić rozmiary tekstu. Pokazuję kod dla values-hdpi , podobnie musisz umieścić kod dla innego pliku wartości rozdzielczości / dimens.xml.
W przypadku innych rozdzielczości jest to xhdpi : 6px , xxhdpi : 8px , xxxhdpi : 12px . Oblicza się to ze stosunku (3: 4: 6: 8: 12), który napisałem powyżej. Omówmy inny przykład rozmiaru tekstu z powyższym współczynnikiem. Jeśli chcesz mieć tekst o rozmiarze 12 pikseli w HDpi, to w innej rozdzielczości będzie
Jest to proste rozwiązanie umożliwiające zaimplementowanie wymaganego rozmiaru tekstu dla wszystkich rozdzielczości. Nie rozważam tutaj urządzeń o rozdzielczości wartości-mdpi . Jeśli ktoś chce uwzględnić rozmiar tekstu dla tej rozdzielczości, to stosunek jest jak 3: 4: 6: 8: 12 . W przypadku jakichkolwiek pytań proszę o informację. Mam nadzieję, że ci to pomoże.
źródło
Czasami lepiej mieć tylko trzy opcje
Użyj małego i dużego, aby odróżnić normalny rozmiar ekranu.
Normalnie nie musisz niczego określać.
Dzięki temu można uniknąć testowania i określania wymiarów dla różnych rozmiarów ekranu.
źródło
Zrobiłem to samo przez wymiar i namalowałem coś takiego (z dp, ale tylko dla tekstu i drawText ())
XML:
Kod:
źródło
dp
do rozmiaru tekstu ... użyjsp
zamiast tego.Każdy może skorzystać z poniższej biblioteki Androida, która jest najłatwiejszym sposobem na dostosowanie rozmiarów tekstu do prawie wszystkich ekranów urządzeń. W rzeczywistości opracowano go na podstawie nowych kwalifikatorów konfiguracji Androida dla rozmiaru ekranu (wprowadzonych w Androidzie 3.2) SmallestWidth swdp.
https://github.com/intuit/sdp
źródło
Jeśli masz API 26, możesz rozważyć użycie autoSizeTextType :
Ustawienie domyślne umożliwia automatyczne skalowanie rozmiaru TextView równomiernie na osi poziomej i pionowej.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
źródło
Myślę, że możesz to zarchiwizować, dodając wiele zasobów układu dla każdego rozmiaru ekranu, przykład:
Źródła: 1. http://developer.android.com/guide/practices/screens_support.html
źródło
Aby ujednolicić wszystkie ekrany, aby wyświetlały te same rozmiary elementów, w tym rozmiar czcionki: - Zaprojektuj interfejs użytkownika na jednym rozmiarze ekranu z dowolnymi rozmiarami, które uznasz za odpowiednie podczas projektowania, tj. Rozmiar czcionki TextView to 14 dp przy domyślnym rozmiarze ekranu 4'6 cali.
Oblicz programowo fizyczny rozmiar ekranu innych telefonów, tj. 5'2 cale innych telefonów / ekranów.
Użyj wzoru, aby obliczyć procentową różnicę między 2 ekranami. tj. jaka jest% różnica między 4'6 a 5'2.
Oblicz różnicę pikseli między dwoma widokami TextView na podstawie powyższego wzoru.
Uzyskaj rzeczywisty rozmiar (w pikselach) rozmiaru czcionki TextView i zastosuj różnicę pikseli (obliczoną wcześniej) do domyślnego rozmiaru czcionki.
W ten sposób możesz zastosować dynamiczny współczynnik proporcji do wszystkich rozmiarów ekranu, a wynik jest świetny. Będziesz mieć identyczny układ i rozmiary na każdym ekranie.
Na początku może to być trochę trudne, ale całkowicie osiąga cel, gdy wymyślisz formułę. Dzięki tej metodzie nie musisz tworzyć wielu układów tylko po to, aby pasowały do różnych rozmiarów ekranu.
źródło
Możesz także użyć
weightSum
ilayout_weight
property, aby dostosować inny ekran.W tym celu musisz zrobić
android:layout_width
= 0dp iandroid:layout_width
= (cokolwiek chcesz);źródło
Jak wspomniał @espinchi z 3.2 (poziom API 13), grupy rozmiarów są przestarzałe. Zakresy rozmiarów ekranu są preferowanym podejściem w przyszłości.
źródło
Nie koduj rozmiarów na stałe.
Aby zwiększyć elastyczność i nowe rozdzielczości ekranu - najlepszą praktyką jest umieszczenie fikcyjnego TextView w układzie, aby uzyskać textSize:
A w swoim kodzie na przykład:
Zachowaj
textSize
jako odniesienie, do którego możesz dodać stały lub procentowy rozmiar (przez obliczenie).źródło