Графический интерфейс Android: менеджер макетов

#android #xml

#Android #xml

Вопрос:

Я изучаю менеджеров верстки, чтобы улучшить дизайн своего приложения. По большей части все прошло нормально. Единственное, чего я хочу, — это чтобы мои кнопки располагались немного выше.Я могу добиться этого, удалив 3 кнопки из диспетчера компоновки, но при этом у меня возникают проблемы с устройствами с более низким разрешением. (Кнопки будут располагаться над полями редактирования текста или над моим объявлением внизу). Я попробовал кое-что из того, что нашел в Интернете, но в итоге только испортил макет.

Вот мой XML-файл:

      <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:id="@ id/linearLayout3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@ id/textviewLayoutLeft"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:id="@ id/tvPpl"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="20dp"
                android:text="Price Per Liter"
                android:textStyle="bold" />

            <TextView
                android:id="@ id/tvAvgConsumption"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="10dp"
                android:text="avg(l/100km)"
                android:textStyle="bold" />

            <TextView
                android:id="@ id/tvDistance"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:text="Distance (km)"
                android:textStyle="bold" />

            <TextView
                android:id="@ id/tvAmountOfPersons"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="10dp"
                android:text="# Persons"
                android:textStyle="bold" />

            <TextView
                android:id="@ id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="20dp"
                android:text="Price Per Person"
                android:textStyle="bold" />
        </LinearLayout>

        <LinearLayout
            android:id="@ id/textfieldLayoutRight"
            android:layout_width="166dp"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <EditText
                android:id="@ id/textPrijsPerLiter"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="numberDecimal" />

            <EditText
                android:id="@ id/textVerbruik"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:ems="10"
                android:inputType="numberDecimal" />

            <EditText
                android:id="@ id/textAfstand"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="numberDecimal" />

            <EditText
                android:id="@ id/textAantalPersonen"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:ems="10"
                android:imeOptions="actionGo"
                android:inputType="numberDecimal" />

            <TextView
                android:id="@ id/textViewPPP"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="10dp"
                android:paddingTop="20dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="#ffff000f"
                android:textStyle="bold" />

        </LinearLayout>

    </LinearLayout>


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="vertical">

        <LinearLayout
            android:id="@ id/linearLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="100dp"
            android:layout_marginTop="10dp"
            android:orientation="vertical">


            <Button
                android:id="@ id/btnBereken"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Calculate"
                android:textStyle="bold" />

            <Button
                android:id="@ id/btnReset"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Reset all textfields"
                android:textStyle="bold" />


            <Button
                android:id="@ id/btnLoad"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Load latest results"
                android:textStyle="bold" />

        </LinearLayout>

        <com.google.android.gms.ads.AdView
            android:id="@ id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            ads:adSize="SMART_BANNER"
            ads:adUnitId="MY_ID" />
    </LinearLayout>

</RelativeLayout>
 

Ответ №1:

Вы можете:

  1. Откажитесь от второго линейного макета и переместите макет кнопок и макеты объявлений в основной макет. Прикрепите макет объявления снизу и объявите его ПЕРЕД макетом кнопки. Установите настройки кнопок на layout_below=»textfieldlayout» и layout_above=»ad» вместо layout_alignParentBottom=»true».
  2. Рассмотрите возможность использования линейной компоновки с weightSum. Каждый родительский макет должен иметь weightSum = 100, у каждого дочернего элемента будет соответственно% пространства. С моей точки зрения, этот способ был бы лучшим, потому что представления будут располагаться одинаково только для всех устройств, и даже глубина дерева макета останется прежней. Вам нужно будет только изменить родительский макет на LinearLayout и установить веса.