Rozjeżdżanie się layoutów, za duże/ za małe litery na różnych urządzeniach.

0

Witam, jak w tytule, stworzyłem aplikację na jednym urządzeniu i emulatorze. Wszystko wydawało się super, aplikacja gotowa do wydania, ale zacząłem teraz sprawdzać na innych urządzeniach. Okazuje się że na telefonie o takim samym ekranie (w calach) tekst jest większy, nie mieści się itp. mając te same textSize. Ma ktoś jakieś sposoby na dobre wykalibrowanie layoutów na różne urządzenia? Prosiłbym właśnie o rady radzenia sobie z różnymi proporcjami ekranu, nie robiąc każdego layoutu dla 3 różnych wersji ekranu (tam small, medium, large etc i dla każdego nowy plik)

3

Z tak "konkretnym" pytaniem najlepsza odpowiedź to: napraw to w swoim xml-u i wyraź rozmiar napisu w jednostkach fizycznych, a nie w pixelach.

0
MarekR22 napisał(a):

Z tak "konkretnym" pytaniem najlepsza odpowiedź to: napraw to w swoim xml-u i wyraź rozmiar napisu w jednostkach fizycznych, a nie w pixelach.

W sensie np. dwa telefony 5,5 cala na jednym 14sp wygląda tak jak na drugim 16sp i nie wiem co z tym zrobić. Wszystko podawałem w xmlach w postaci dp, sp, bez px.

Może jest jakaś funkcja, atrybut żeby textsize się dobierał na podstawie dostępnego miejsca?

Dodam że głównie dzieje mi się to w Toolbarze, TabLayoutcie (są na jednym theme) oraz na buttonach z bibliteki FitButton (mają swoje atrybuty fb_textSize). Da się coś z tym zrobić czy trzeba by zmieniać te FitButtony na zwykłe buttony? Tylko rozwali mi to wtedy design.

Tak wygląda u mnie FitButton mniej więcej bo mam ich dużo

<com.github.nikartm.button.FitButton
            android:id="@+id/add_category_cancel_btn"
            android:layout_width="130dp"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:theme="@style/FitButton"

            app:fb_divHeight="25dp"

            app:fb_icon="@drawable/ic_close_black_24dp"
            app:fb_iconWidth="32dp"
            app:fb_iconHeight="20dp"
            app:fb_iconMarginEnd="10dp"
            app:fb_iconMarginStart="10dp"

            app:fb_text="@string/cancel"
            app:fb_textPaddingStart="15dp" />
    </LinearLayout>

a jego theme

<style name="FitButton">

        <item name="android:gravity">center_vertical</item>
        <item name="fb_iconPosition">left</item>
        <item name="fb_divWidth">1dp</item>

        <item name="fb_cornerRadius">15dp</item>

        <item name="fb_backgroundColor">?attr/colorPrimary</item>
        <item name="fb_divColor">?attr/textColorOnPrimaryColor</item>
        <item name="fb_iconColor">?attr/textColorOnPrimaryColor</item>
        <item name="fb_textSize">14sp</item>
        <item name="fb_textColor">?attr/textColorOnPrimaryColor</item>
    </style>
2

Ale to ma się tak zachowywać. Na dwóch ekranach o takiej samej fizycznej wielkości, ale różnej gęstości pikseli, elementy siłą rzeczy będą inaczej wyglądać, bo jest inna ilość pikseli na ekranie. Jeżeli masz problem z tym, że coś się nie mieści, to projektuj ekrany przede wszystkim pod małe urządzenia. Jeśli dalej coś jest nie tak jakbyś chciał to możesz odwoływać się do zasobów np. @dimen/text_size_small i różnie je definiować dla różnych gęstości pikseli czy tam konfiguracji. W praktyce zazwyczaj wystarczy odpowiednio projektować ekran bez zabawy w różne definicje zasobów.

0

Oooo, racja o tym zapomniałem... gęstość pikseli, to wszystko wyjaśnia w takim razie. No ale z drugiej strony projektując na mały telefonik, to na dużym tablecie to będzie wyglądało co najmniej komicznie bez tych zasobów :/
No cóż pokombinuje coś z tymi zasobami może się uda to lepiej zaprojektować.
Dziękuję pozdrawiam.

1

Nie no, jeśli chcesz wspierać telefony i tablety, to prawie na pewno musisz mieć dwa osobne layouty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1