Как переключить макет XML с выбора счетчика - PullRequest
0 голосов
/ 30 января 2019

Я разрабатываю простой калькулятор ИМТ для Android.У меня есть поля ввода для фунтов, футов и дюймов.Я хочу дать пользователям возможность переключаться с имперских единиц на метрические, поэтому я добавил виджет счетчика с имперскими и метрическими параметрами.Если пользователь меняет счетчик на метрику, я хочу иметь возможность изменить макет XML так, чтобы поля ввода были кг и см.Каков наилучший способ изменить макет XML, когда пользователь переключается между метрической и британской?

Я пытался создать новое действие, которое загружает XML-формат метрики, когда пользователь переключается на него, но кажется плохим дизайном для создания нового действия просто для переключения единиц.Я также попытался просто использовать setContentLayout, чтобы установить макет в metric.xml, если метрика была выбрана, и imperial.xml, если выбран империал.Этот вид работает, но рекламные и блочные виджеты больше не настраиваются после переключения между макетами.Я все еще новичок в разработке Android, поэтому мне интересно, каков будет лучший подход к этому?Я просто пытаюсь сделать небольшое изменение макета, когда пользователь переключается между различными параметрами устройства.Любые советы приветствуются.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете использовать FrameLayout.Это позволяет сделать разные макеты друг на друга (разные виды могут быть расположены на других видах).Например:

<FrameLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:background="#FFFFFF">

    <RelativeLayout
        android:id="@+id/digital_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginLeft="294dp"
        android:layout_marginTop="64dp">



        <Spinner
            android:id="@+id/spinner101"
            android:layout_width="135dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/checkBox100"
            android:layout_toEndOf="@+id/textView100"
            android:visibility="visible"/>

        <TextView
            android:id="@+id/textView102"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/spinner101"
            android:text="Value pulse"
            android:textSize="20dp"
            android:visibility="visible"/>


        <TextView
            android:id="@+id/textView107"
            android:layout_width="wrap_content"
            android:layout_height="22dp"
            android:layout_alignStart="@+id/textView106"
            android:layout_below="@+id/textView103"
            android:gravity="center"
            android:text="11%"
            android:visibility="visible"/>

    </RelativeLayout>

<RelativeLayout

    android:id="@+id/analog_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/editText3"
        android:layout_width="136dp"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/spinner2"
        android:layout_below="@+id/checkBox3"
        android:ems="10"
        android:hint="Constant"
        android:inputType="textPersonName"
        android:textSize="15dp"
        android:visibility="invisible" />

    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/checkBox9"
        android:layout_marginLeft="20dp"
        android:onClick="onResetClick"
        android:text="Reset" />

    <View
        android:id="@+id/delitel1"
        android:layout_width="234dp"
        android:layout_height="2dp"
        android:layout_alignStart="@+id/textView7"
        android:layout_below="@+id/button6"
        android:layout_marginTop="10dp"
        android:background="#004f9b" />

    <TextView
        android:id="@+id/textView14"
        android:layout_width="135dp"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignTop="@+id/delitel1"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:text="Language:"
        android:textSize="20dp"
        android:visibility="invisible" />

</RelativeLayout>

Итак, вам нужно присвоить разные идентификаторы для каждого RelativeLayouts.Здесь есть android:id="@+id/digital_layout" и android:id="@+id/analog_layout".

И в коде нужно написать обработчик для вашего счетчика:

@Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        switch (position) {
            case 0:
                digital_layout.setVisibility(View.INVISIBLE);
                analog_layout.setVisibility(View.VISIBLE);
            break;
            case 1:
                digital_layout.setVisibility(View.VISIBLE);
                analog_layout.setVisibility(View.INVISIBLE);
            break;
            etc.
        }
    }
0 голосов
/ 30 января 2019

Обычно я помещал бы все в xml-файл макета активности и переключался в зависимости от условия, подобного этому

<TextView
      android:id="@+id/feet"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:visibility="gone"/>

<TextView
      android:id="@+id/inch"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:visibility="gone"/>

И в вашем приемнике выбора адаптера счетчика вы можете переключать представление, которое хотите показать:

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