android自定义表单

作者: wuwind | 来源:发表于2016-08-03 11:26 被阅读1267次

    转载请标明出处:http://www.jianshu.com/p/6307737432ae

    一、概述


    场景:如上图,注册时,需要获取填入的内容,并且判断是否为空,如果为空则提示。

    如果你有耐心,可以一个个获取editText,然后逐个获取值,逐个用if else判断是否为空。

    下面就是为解决这一个繁琐的问题提供方案。

    二、使用

    效果图

    1、引入库 compile 'com.wuwind.form:formlibrary:1.0.0'

    2、在你的布局文件最外层嵌套

    <com.wuwind.form.FormLayout android:id="@+id/formLayout" android:layout_width="match_parent" android:layout_height="match_parent">
    中间略去...
    </com.wuwind.form.FormLayout>

    3、代码
    3.1
    FormLayout formLayout = (FormLayout) findViewById(R.id.formLayout);
    3.2
    Map<String, String> results = formLayout.getResults();//获取表单中的内容
    3.3
    formLayout.reset();//重置,清空

    4.说明
    <EditText style="@style/EditText_Black" android:hint="姓名" android:tag="name" />

    • tag 为"null"不是必填字段(默认都是必填字段)
    • 必填字段为空则弹出“请输入xxx”提示,
    • 调用getResult 返回结果map,key为设置的tag,如果tag为空的话 依次从1开始递增。如果有必填字段为空,则返回null。
    • 调用reset 清空表单。

    三、实现原理

    1.获取所有的editText
    private void getEditTexts(ViewGroup vg) { int childCount = vg.getChildCount(); for (int i = 0; i < childCount; i++) { View view = vg.getChildAt(i); if (view instanceof EditText) editTexts.add((EditText) view); else if (view instanceof ViewGroup) { getEditTexts((ViewGroup) view); } } }
    2.获取值的时候,遍历初始化所获取的editText,根据tag判读是否为必填字段。
    public Map<String, String> getResults() { key = 0; results.clear(); for (EditText editText : editTexts) { Object tag = editText.getTag(); String r = editText.getText().toString(); if ((tag == null || !tag.equals("null")) && TextUtils.isEmpty(r)) { checkEdit(editText.getHint().toString()); return null; } if (tag == null || tag.equals("null")) { key++; results.put(key + "", r); } else { results.put(tag.toString(), r); } } return results; }
    源码地址:https://github.com/wuwind/FormProject

    相关文章

      网友评论

      本文标题:android自定义表单

      本文链接:https://www.haomeiwen.com/subject/fhsqsttx.html