我正在为android开发一个简单的BMI计算器。我有磅,英尺和英寸的输入字段。我想让用户能够从帝国单位切换到公制,所以我增加了一个旋转小部件的帝国和米制作为选择。如果用户将旋转器更改为度量,我希望能够更改XML布局,以便输入字段为kg和cm。当用户在度量和帝国之间切换时,更改XML布局的最佳方法是什么?
我尝试创建一个新的活动,在用户切换到它时加载度量布局XML,但是仅仅为了切换单元创建一个新的活动似乎是一个糟糕的设计。我还尝试简单地使用setContentLayout将布局设置为metric.xml,如果spinner有米制选择,则使用imperial.xml (如果选择帝国)。这类工作,但广告和旋转小部件不再配置后,切换的布局。我仍然是android开发的新手,所以我想知道最好的方法是什么?当用户在不同的单元选项之间切换时,我只是试图做一个轻微的布局更改。任何小费都会得到赏识。
发布于 2019-01-30 02:38:37
通常,我会将所有内容放在活动布局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"/>在spinner适配器选择监听器中,您可以切换要显示的视图:
feet.setVisibility(View.VISIBLE)发布于 2019-01-30 04:27:40
您可以使用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.
}
}https://stackoverflow.com/questions/54432260
复制相似问题