Rozjeżdżanie się elementów UI

0

Cześć ! Mam problem.

Kiedy tworzę wygląd aplikacji w Android Studio ustawiam wszystko tak jak chciałbym mieć.

Problem polega na tym, że kiedy uruchamiam aplikację na telefonie ( Galaxy S6 ) to wszystko zmienia swoje położenie i rozmiar, a na drugim telefonie ( Huawei P9 Plus ) jest jeszcze inaczej.

Czy da się zrobić tak żeby telefon np. skalował wymiary i ustawił wszystko tak jak powinno być ?

0

Przeczytałem to.
Czy powinienem zrobić np. foldey layout-sw320dp oraz layout-sw480dp i W nich layouty ( main_activity.xml ( mdpi ), main_activity.xml ( hdpi ) itp. ) ?

Zrobiłem na razie tylko 2 foldery te co opisałem wyżej i w edytorze layoutu tam gdzie wybieram urządzenie na którym chce się wzorować to wszystkie oprócz 2 ostatnich było przyporządkowane pod 1 folder.
Czy to jest normalne?

Przepraszam za banalne pytania, Ale tego nigdy nie robiłem.

0

Najlepiej to wrzuć swoj layout i screen jak to wygląda.

0

Layout :

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Views.LoginView"
        android:background="@color/backgroundColor">

    <ProgressBar
            style="?android:attr/progressBarStyle"
            android:layout_width="98dp"
            android:layout_height="90dp"
            android:indeterminateTint="@color/progressBarColor"
            android:id="@+id/progressBar"
            android:elevation="12dp"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent"/>

    <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/profile_image"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:src="@drawable/icon"
            android:elevation="11dp"
            android:foregroundGravity="clip_horizontal"
            app:civ_border_width="2dp"
            app:civ_border_color="#FF000000"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="50dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="@+id/cardView"
            app:layout_constraintStart_toStartOf="@+id/cardView" app:layout_constraintEnd_toEndOf="@+id/cardView"
            app:layout_constraintVertical_bias="0.0"/>
    <android.support.v7.widget.CardView
            android:layout_width="330dp"
            android:layout_height="match_parent"
            android:layout_marginTop="100dp"
            app:layout_constraintTop_toTopOf="parent" android:layout_marginBottom="30dp"
            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="30dp" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="30dp"
            app:cardElevation="10dp" android:id="@+id/cardView" app:layout_constraintVertical_bias="0.83">

        <android.support.constraint.ConstraintLayout android:layout_width="match_parent"
                                                     android:layout_height="match_parent">

            <EditText
                    android:id="@+id/userNameET"
                    android:layout_width="292dp"
                    android:layout_height="56dp"
                    android:background="@drawable/login"
                    android:ems="10"
                    android:inputType="textPersonName"
                    android:textAlignment="center"
                    android:layout_marginTop="164dp"
                    app:layout_constraintTop_toTopOf="parent" android:layout_marginStart="45dp"
                    app:layout_constraintStart_toStartOf="parent" android:layout_marginEnd="45dp"
                    app:layout_constraintEnd_toEndOf="parent"
                    android:layout_marginBottom="8dp" app:layout_constraintBottom_toTopOf="@+id/passwordET"
                    app:layout_constraintVertical_bias="0.324"/>

            <EditText
                    android:id="@+id/passwordET"
                    android:layout_width="292dp"
                    android:layout_height="56dp"
                    android:background="@drawable/haslo"
                    android:ems="10"
                    android:inputType="textPassword"
                    android:textAlignment="center"
                    android:layout_marginEnd="45dp"
                    app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="45dp"
                    app:layout_constraintStart_toStartOf="parent" android:layout_marginBottom="116dp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintVertical_bias="1.0"/>
            <Button
                    android:id="@+id/loginBTT"
                    android:layout_width="120dp"
                    android:layout_height="30dp"
                    android:background="@drawable/button_shape"
                    android:stateListAnimator="@null"
                    android:elevation="10dp"
                    android:text="@string/signIn"
                    android:layout_marginTop="8dp"
                    app:layout_constraintTop_toTopOf="parent" android:layout_marginStart="100dp"
                    app:layout_constraintStart_toStartOf="parent" android:layout_marginBottom="8dp"
                    app:layout_constraintBottom_toBottomOf="parent" android:layout_marginEnd="8dp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintVertical_bias="0.903" app:layout_constraintHorizontal_bias="0.78"/>
            <TextView
                    android:text="@string/register"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/registerBTT" android:layout_marginTop="8dp"
                    app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginStart="34dp" app:layout_constraintEnd_toEndOf="parent"
                    android:layout_marginEnd="8dp"
                    android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent"
                    android:textSize="18sp"
                    app:layout_constraintVertical_bias="0.9" android:textStyle="italic"
                    android:textColor="@color/textColor"
                    app:layout_constraintHorizontal_bias="0.0"/>

        </android.support.constraint.ConstraintLayout>
    </android.support.v7.widget.CardView>

</android.support.constraint.ConstraintLayout>

Screen folderu src: https://imgur.com/a/SaVYoHT

1

Czy budujesz UI za pomocą graficznego edytora? Jeśli tak, to czas przestać, bo to zazwyczaj proszenie się o kłopoty.

Nie używaj zahardcodowanych wartości dla wielkości widoków, to będą się dostosowywać do rozmiaru telefonu. https://developer.android.com[...]reensizes#TaskUseWrapMatchPar

Z ConstraintLayout jest trochę inne zachowanie, ale jest to opisane w tym samym linku.

Note: When using ConstraintLayout, you should not use match_parent. Instead, set the dimension to 0dp to enable a special behavior called "match constraints," which is generally the same as what you expect from match_parent. For more information, see how to adjust the view size in ConstraintLayout.

0

Czyli z edytora graficznego przerzucić się na tworzenie UI za pomocą kodu ?

Tak w ogóle to dlatego się przesuwają ?

1

Za pomocą pisania XML samemu zamiast przesuwania przycisków za pomocą myszki.

Przesuwają się, bo budujesz UI pod jeden konkretny ekran. Powiedzmy, że ustawiasz pole tekstowe o szerokości 200dp. Na ekranie 400dp będzie ono zajmowało 50% szerokości ekranu, ale telefony mają różne wielkości. Jeżeli uruchomisz swoją aplikację na telefonie o szerokości, powiedzmy, 800dp to pole tekstowe będzie odpowiednio mniejsze i będzie zajmować tylko 25% ekranu. Zazwyczaj czegoś takiego efektu się nie chce i w pliku XML należy zaznaczyć przykładowo, że to pole tekstowe ma zajmować całą szerokość ekranu. Albo całą dostępną przestrzeń między jednym a drugim widokiem. Wtedy na każdej konfiguracji widoki będą miały taką samą strukturę.

0

Ok, dzięki za pomoc !

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