我正在为Android开发一个简单的BMI计算器。我有磅,英尺和英寸的输入字段。我想让用户能够从英制切换为公制,因此我添加了一个带有英制和公制作为选项的微调小部件。如果用户将微调器更改为公制,我希望能够更改XML布局,以使输入字段为kg和cm。当用户在公制和英制之间切换时,更改XML布局的最佳方法是什么?
我尝试创建一个新的活动,当用户切换到该活动时会加载度量标准布局XML,但是创建一个仅用于切换单位的新活动似乎设计不佳。我还尝试过简单地使用setContentLayout将布局设置为metric.xml(如果Spinner选择了metric)和imperial.xml(如果选择了imperial)。这种工作方式,但是在布局之间切换后不再配置广告和微调小部件。我还是Android开发的新手,所以我想知道最好的方法是什么?当用户在不同的单位选项之间切换时,我只是试图对布局进行一点更改。任何提示表示赞赏。
答案 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.
}
}