适用于多种单位类型的安卓编辑文本



我在Android中有一个表单,用户必须在其中输入他们的身高。但是,我有一个微调器,用户可以在其中选择测量单位(英尺/英寸和厘米),然后是一个可以输入实际值的EditText

如果用户选择 cm 作为他们的单位,我想要一个EditText.如果他们选择英尺/英寸,我想显示 2 个EditText字段

我目前处理这个问题的方式似乎效率低下。我有 3 个EditText字段:1 表示厘米、1 表示英尺和 1 表示英寸

然后,我将onItemSelected侦听器附加到微调器。如果用户选择 cm 选项,我会在 cm EditTextsetVisibility(view.VISIBLE),在英尺和英寸EditText字段上setVisibility(view.INVISIBLE)。如果他们选择英尺/英寸选项,我只需反向显示可见性并显示/隐藏相应的字段。

是否有更合适的方法来处理需要不同数量的EditText字段的多个单位类型?

注意:我的EditText实际上被包裹在TextInputLayouts中,所以我可以在提示上获得材质动画,并在我设置可见性的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个编辑文本而不是3个。对于脚和厘米都有一个主要EditText,如果他们选择英尺和英寸,则有一个用于英寸的次要。然后,您只需设置主要EditText的提示并切换辅助EditText可见性。

如果您想使用 3 个EditText优化当前解决方案,您可以做一些事情。您不必在每次他们切换单位时都设置提示,您应该能够在onCreateView中设置一次,因为每个单位都有自己的EditText。这将从您的方法中删除 6 行。你可以更进一步,制定一种方法toggleVisibility(EditText editText, boolean visible, boolean giveFocus)但这取决于你。

作为旁注,您可能希望使用 View.GONE 而不是 View.INVISIBLEView.INVISIBLE只是使其不可见,但它仍然占用布局中的空间。因此,如果这是您的布局:

(输入 1) (输入 2)

您将 (input1) 设置为不可见,这就是布局的样子:

(空白) (输入 2)

相反,如果您将 (input1) 设置为 View.GONE这就是它的样子

(输入 2)

最新更新