如何从微调框选择中切换XML布局

时间:2019-01-30 01:50:25

标签: android xml android-studio

我正在为Android开发一个简单的BMI计算器。我有磅,英尺和英寸的输入字段。我想让用户能够从英制切换为公制,因此我添加了一个带有英制和公制作为选项的微调小部件。如果用户将微调器更改为公制,我希望能够更改XML布局,以使输入字段为kg和cm。当用户在公制和英制之间切换时,更改XML布局的最佳方法是什么?

我尝试创建一个新的活动,当用户切换到该活动时会加载度量标准布局XML,但是创建一个仅用于切换单位的新活动似乎设计不佳。我还尝试过简单地使用setContentLayout将布局设置为metric.xml(如果Spinner选择了metric)和imperial.xml(如果选择了imperial)。这种工作方式,但是在布局之间切换后不再配置广告和微调小部件。我还是Android开发的新手,所以我想知道最好的方法是什么?当用户在不同的单位选项之间切换时,我只是试图对布局进行一点更改。任何提示表示赞赏。

2 个答案:

答案 0 :(得分:0)

通常,我会将所有内容放入活动布局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)

答案 1 :(得分:0)

您可以使用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提供不同的ID。这里有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.
        }
    }