Android 多种单位类型的 EditText
Android EditText for multiple unit types
我在 Android 中有一个表格,用户必须在其中输入他们的身高。但是,我有一个微调器,用户可以在其中 select 测量单位(feet/inches 和厘米),然后是一个 EditText
他们可以在其中输入实际值
如果用户selects厘米为单位,我要单EditText
。如果他们 select feet/inches,我想显示 2 EditText
个字段
我目前处理这个问题的方式似乎效率低下。我有 3 个 EditText
字段:1 个用于厘米,1 个用于英尺,1 个用于英寸
然后我将 onItemSelected
侦听器附加到微调器。如果用户 select 选择厘米选项,我 setVisibility(view.VISIBLE)
在厘米 EditText
上,setVisibility(view.INVISIBLE)
在英尺和英寸 EditText
字段上。如果他们 select feet/inches 选项,我只是做相反的可见性和 show/hide 相应的字段。
是否有更合适的方法来处理需要不同数量 EditText
字段的多种单位类型?
注意:我的 EditText
实际上包含在 TextInputLayouts
中,所以我可以在提示上获得 Material 动画,它在我设置的 TextInputLayouts
上能见度。
代码看起来像这样:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Height unit spinner
String [] values = {"cm","ft"};
Spinner spinner = (Spinner) view.findViewById(R.id.input_height_spinner);
spinner.setOnItemSelectedListener(this);
ArrayAdapter<String> LTRadapter = new ArrayAdapter<>(this.getActivity(), android.R.layout.simple_spinner_item, values);
LTRadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner.setAdapter(LTRadapter);
heightCMWrapper = (TextInputLayout) view.findViewById(R.id.input_height_cm_wrapper);
heightFTWrapper = (TextInputLayout) view.findViewById(R.id.input_height_ft_wrapper);
heightINWrapper = (TextInputLayout) view.findViewById(R.id.input_height_in_wrapper);
//Some other code for inflating layout etc.
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
heightCMWrapper.setVisibility(view.VISIBLE);
heightCMWrapper.setHint("Height (cm)");
heightCMWrapper.requestFocus();
heightFTWrapper.setVisibility(view.INVISIBLE);
heightFTWrapper.setHint("");
heightINWrapper.setVisibility(view.INVISIBLE);
heightINWrapper.setHint("");
break;
case 1:
heightCMWrapper.setVisibility(view.INVISIBLE);
heightCMWrapper.setHint("");
heightFTWrapper.setVisibility(view.VISIBLE);
heightFTWrapper.setHint("Feet");
heightFTWrapper.requestFocus();
heightINWrapper.setVisibility(view.VISIBLE);
heightINWrapper.setHint("Inches");
break;
}
}
您可以只使用 2 个 EditText 而不是 3 个来完成。如果他们选择英尺和英寸,则有一个用于英尺和厘米的主要 EditText
和一个用于英寸的辅助文本。然后你只需要设置主要 EditText
的提示并切换次要 EditText
可见性。
如果您想用 3 EditText
优化当前的解决方案,您可以做一些事情。您不必在每次切换单位时都设置提示,您应该能够在 onCreateView
中设置一次,因为每个单位都有自己的 EditText
。这将从您的方法中删除 6 行。您可以更进一步并制作一个方法 toggleVisibility(EditText editText, boolean visible, boolean giveFocus)
但这取决于您。
作为旁注,您可能希望使用 View.GONE
而不是 View.INVISIBLE
。 View.INVISIBLE
只是让它不可见,但它仍然在布局中消耗它的 space。因此,如果这是您的布局:
(输入1) (输入2)
然后将 (input1) 设置为不可见,这就是布局的样子:
(空白)(输入 2)
相反,如果您将 (input1) 设置为 View.GONE
,这就是它的样子
(输入 2)
我在 Android 中有一个表格,用户必须在其中输入他们的身高。但是,我有一个微调器,用户可以在其中 select 测量单位(feet/inches 和厘米),然后是一个 EditText
他们可以在其中输入实际值
如果用户selects厘米为单位,我要单EditText
。如果他们 select feet/inches,我想显示 2 EditText
个字段
我目前处理这个问题的方式似乎效率低下。我有 3 个 EditText
字段:1 个用于厘米,1 个用于英尺,1 个用于英寸
然后我将 onItemSelected
侦听器附加到微调器。如果用户 select 选择厘米选项,我 setVisibility(view.VISIBLE)
在厘米 EditText
上,setVisibility(view.INVISIBLE)
在英尺和英寸 EditText
字段上。如果他们 select feet/inches 选项,我只是做相反的可见性和 show/hide 相应的字段。
是否有更合适的方法来处理需要不同数量 EditText
字段的多种单位类型?
注意:我的 EditText
实际上包含在 TextInputLayouts
中,所以我可以在提示上获得 Material 动画,它在我设置的 TextInputLayouts
上能见度。
代码看起来像这样:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Height unit spinner
String [] values = {"cm","ft"};
Spinner spinner = (Spinner) view.findViewById(R.id.input_height_spinner);
spinner.setOnItemSelectedListener(this);
ArrayAdapter<String> LTRadapter = new ArrayAdapter<>(this.getActivity(), android.R.layout.simple_spinner_item, values);
LTRadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner.setAdapter(LTRadapter);
heightCMWrapper = (TextInputLayout) view.findViewById(R.id.input_height_cm_wrapper);
heightFTWrapper = (TextInputLayout) view.findViewById(R.id.input_height_ft_wrapper);
heightINWrapper = (TextInputLayout) view.findViewById(R.id.input_height_in_wrapper);
//Some other code for inflating layout etc.
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
heightCMWrapper.setVisibility(view.VISIBLE);
heightCMWrapper.setHint("Height (cm)");
heightCMWrapper.requestFocus();
heightFTWrapper.setVisibility(view.INVISIBLE);
heightFTWrapper.setHint("");
heightINWrapper.setVisibility(view.INVISIBLE);
heightINWrapper.setHint("");
break;
case 1:
heightCMWrapper.setVisibility(view.INVISIBLE);
heightCMWrapper.setHint("");
heightFTWrapper.setVisibility(view.VISIBLE);
heightFTWrapper.setHint("Feet");
heightFTWrapper.requestFocus();
heightINWrapper.setVisibility(view.VISIBLE);
heightINWrapper.setHint("Inches");
break;
}
}
您可以只使用 2 个 EditText 而不是 3 个来完成。如果他们选择英尺和英寸,则有一个用于英尺和厘米的主要 EditText
和一个用于英寸的辅助文本。然后你只需要设置主要 EditText
的提示并切换次要 EditText
可见性。
如果您想用 3 EditText
优化当前的解决方案,您可以做一些事情。您不必在每次切换单位时都设置提示,您应该能够在 onCreateView
中设置一次,因为每个单位都有自己的 EditText
。这将从您的方法中删除 6 行。您可以更进一步并制作一个方法 toggleVisibility(EditText editText, boolean visible, boolean giveFocus)
但这取决于您。
作为旁注,您可能希望使用 View.GONE
而不是 View.INVISIBLE
。 View.INVISIBLE
只是让它不可见,但它仍然在布局中消耗它的 space。因此,如果这是您的布局:
(输入1) (输入2)
然后将 (input1) 设置为不可见,这就是布局的样子:
(空白)(输入 2)
相反,如果您将 (input1) 设置为 View.GONE
,这就是它的样子
(输入 2)