Почему кнопки моего приложения смешиваются и меняют свое местоположение? - PullRequest
0 голосов
/ 10 февраля 2019

Я просто новичок в приложении для Android.Я разработал калькулятор.Кнопки и другие предметы на разных телефонах уходят куда-то еще.Они смешиваются и меняют свое место.Например, на Galaxy A7 они правы.Но кнопки на Galaxy S7 и S3 меняются.Я прочитал много вопросов, но не смог решить проблему.Пример моего xml-кода выглядит следующим образом:

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0"
        tools:context=".MainActivity">

        <Button
            android:id="@+id/cos"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="94dp"
            android:layout_marginBottom="125dp"
            android:text="Cos"
            android:visibility="gone" />

        <EditText
            android:id="@+id/showNumbers"
            android:layout_width="344dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="58dp"
            android:autofillHints=""
            android:ems="10"
            android:inputType="text"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

        <Button
            android:id="@+id/b7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="6dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="101dp"
            android:text="7" />

        <Button
            android:id="@+id/b8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="90dp"
            android:layout_marginLeft="90dp"
            android:layout_marginTop="101dp"
            android:text="8" />

        <Button
            android:id="@+id/b9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="101dp"

            android:layout_marginLeft="174dp"

            android:text="9" />

        <Button
            android:id="@+id/zarb"
            android:layout_width="109dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="101dp"
            android:layout_marginLeft="256dp"
            android:text="×" />

        <Button
            android:id="@+id/tagsim"
            android:layout_width="109dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="149dp"
            android:layout_marginLeft="256dp"

            android:text="÷" />

        <Button
            android:id="@+id/sum"
            android:layout_width="109dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="197dp"
            android:layout_marginLeft="256dp"

            android:text="+" />

        <Button
            android:id="@+id/mines"
            android:layout_width="109dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="245dp"
            android:layout_marginLeft="256dp"

            android:text="-" />

        <Button
            android:id="@+id/delete"
            android:layout_height="wrap_content"
            android:layout_width="100dp"
            android:layout_marginTop="295dp"
            android:layout_marginLeft="270dp"

            android:text="" />

        <Button
            android:id="@+id/b4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="6dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="149dp"
            android:text="4" />

        <Button
            android:id="@+id/b5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/b8"
            android:layout_marginLeft="90dp"
            android:text="5" />

        <Button
            android:id="@+id/b6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/b9"
            android:layout_marginLeft="174dp"
            android:text="6" />

        <Button
            android:id="@+id/b3"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_marginLeft="174dp"
            android:layout_below="@+id/b6"
            android:text="3" />

        <Button
            android:id="@+id/b1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="6dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="197dp"
            android:text="1" />

        <Button
            android:id="@+id/b2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="90dp"
            android:layout_marginLeft="90dp"
            android:layout_marginTop="197dp"
            android:text="2" />

        <Button
            android:id="@+id/b0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="90dp"
            android:layout_marginLeft="90dp"
            android:layout_marginTop="245dp"
            android:text="0" />

        <Button
            android:id="@+id/bsm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="6dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="245dp"
            android:text="+/-" />

        <Button
            android:id="@+id/bm"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_marginLeft="174dp"
            android:layout_below="@+id/b3"
            android:text="." />

        <Button
            android:id="@+id/clean"
            android:layout_height="wrap_content"
            android:layout_width="100dp"
            android:layout_marginTop="295dp"
            android:layout_marginLeft="172dp"
            android:text="C" />

        <TextView
            android:id="@+id/result"
            android:layout_width="331dp"
            android:layout_height="37dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="22dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="22dp" />

        <Button
            android:id="@+id/mosavy"
            android:layout_width="170dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="6dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="295dp"
            android:text="=" />

        <Button
            android:id="@+id/pro"
            android:layout_width="364dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="6dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="345dp"
            android:text="ماشین حساب پیشرفته" />

        <Button
            android:id="@+id/sin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="6dp"
            android:layout_marginBottom="125dp"
            android:text="Sin"
            android:visibility="gone" />

        <Button
            android:id="@+id/t2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="182dp"
            android:layout_marginBottom="85dp"
            android:visibility="gone" />

        <Button
            android:id="@+id/t1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="94dp"
            android:layout_marginBottom="85dp"
            android:visibility="gone" />

        <Button
            android:id="@+id/ctan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="6dp"
            android:layout_marginBottom="85dp"
            android:text="Ctan"
            android:visibility="gone" />

        <Button
            android:id="@+id/tan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="182dp"
            android:layout_marginBottom="125dp"
            android:text="Tan"
            android:visibility="gone" />

    </Rela[۵][1]tiveLayout>

</android.support.constraint.ConstraintLayout>

Это ссылка на фотографию моего приложения на galaxy s7 http://uupload.ir/files/sova_photo_in_galaxy_s7.jpg и на a7 http://uupload.ir/files/86cm_photo_on_galaxy_a7.jpg

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Без каких-либо изображений, чтобы показать, в чем собственно проблема, я могу только высказать свое лучшее предположение.

Скорее всего, ваша проблема связана с тем, что вы жестко задаете точные значения ширины и полей.

Пример того, что я имею в виду:

<Button
    android:id="@+id/mosavy"
    android:layout_width="170dp"

Вы даете точное значение dp для того, что вы хотите для ширины и полей.

Это нормально, если вы кодируете только одно конкретное устройство, но Android - это платформа, используемая на множестве устройств, где множество разных устройств имеют разные разрешения экрана.

Таким образом, 170dp может хорошо выглядеть на одном устройстве, но на другом устройстве оно будет выглядеть слишком большим или на другом устройстве может показаться слишком маленьким.

Из-за этого Android использует Dimensional Resources для решения этой проблемы.

Вы должны заметить файл dimens.xml в папке values вашего проекта приложения.

Внутри этого файла вы можете создать что-то вроде:

<dimen name="mosavy_height">170dp</dimen>

Затем вы можете заменить высоту в кнопке mosavy на:

<Button
    android:id="@+id/mosavy"
    android:layout_width="@dimen/mosavy_height"

Сделав это изменение,вы говорите системе подключить 170dp в ширину.

Но не думайте, что мы просто предпринимаем дополнительные шаги для выполнения той же задачи.Настоящая цель этого заключается в том, что вы можете объявить тот же mosavy_height в dimens.xml файле другой папки values в вашем приложении.

Например, вы можете создать другую папку с именем values-xxxhdpi, а затем поместить туда файл dimens.xml со строкой:

<dimen name="mosavy_height">190dp</dimen>

Итак, теперь ваш файл макета будет подключенв 190dp в ширину, если разрешение телефона рассматривается в скобках xxxhdpi, и он подключит 170dp, если это не так, поскольку обычная папка values без модификаторов в конце является значением по умолчанию.

Таким образом, внося подобные изменения, вы можете точно настроить макет, чтобы он выглядел одинаково на любом типе экрана на любом типе устройства.

Кроме того, вам не нужно помещать ваш RelativeLayout внутрь ConstraintLayout.Вы закодировали свой RelativeLayout с намерением полностью растянуть его внутри экрана, что не дает ему никакой пользы внутри ConstraintLayout.

Это как будто вы дарите рождественский подарок ребенку, но храните егокоробка внутри коробки.Поэтому ребенку придется дважды развернуть подарок, прежде чем он получит приз ... что неэффективно.

Поскольку ваш код предназначен для работы с RelativeLayout, вы можете избавиться от ConstraintLayout, не мешая вашему RelativeLayout.

0 голосов
/ 10 февраля 2019

Прежде всего, узнайте, как использовать ConstraintLayout и использовать его, это действительно полезно;

В любом случае, если вы не хотите его использовать, поставьте RelativeLayout в качестве основного тега и удалитеConstraintLayout, это бесполезно и дорого, имея одну раскладку, которая содержит просто другую раскладку.

Тогда размеры Android действительно отличаются от устройства к устройству, так же как и разрешение экрана, так что это правильно использовать dp, но в большинстве случаев это не решает проблему.

Попробуйте добавить эту строку в build.gradle (Модуль: приложение) в dependencies:

implementation 'com.intuit.sdp:sdp-android:1.0.5'

А затем выразите ваше измерение в файле XML с помощью:

"@dimen/_[number]sdp"

Например, ваш EditText "showNumbers" станет таким:

<EditText
        android:id="@+id/showNumbers"
        android:layout_width="344dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="@dimen/_20sdp"
        android:layout_marginLeft="@dimen/_20sdp"
        android:layout_marginTop="@dimen/_58sdp"
        android:autofillHints=""
        android:ems="10"
        android:inputType="text"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

Он не будет точным с точностью до миллиметра,но точнее то, что используется только dp

Важно: Не забудьте "синхронизировать сейчас" градел, когда вы добавляете строки в .gradle файлах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...