Android编辑信息界面,组合控件的封装

Github地址(完整Demo,欢迎下载)

https://github.com/ganchuanpu/ItemGroup

效果图

Android编辑信息界面,组合控件的封装

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
 <resources>
     <declare-styleable name="ItemGroup">
         <!--标题的文字-->
         <attr name="title" format="string" />
         <!--标题的字体大小-->
         <attr name="title_size" format="dimension" />
         <!--标题的字体颜色-->
         <attr name="title_color" format="color" />
         <!--输入框的内容-->
         <attr name="edt_content" format="string" />
         <!--输入框的字体大小-->
         <attr name="edt_text_size" format="dimension" />
         <!--输入框的字体颜色-->
         <attr name="edt_text_color" format="color" />
         <!--输入框提示的内容-->
         <attr name="edt_hint_content" format="string" />
         <!--输入框的提示字体的字体颜色-->
         <attr name="edt_hint_text_color" format="color" />
         <!--输入框是否可以编辑内容-->
         <attr name="isEditable" format="boolean"/>
         <!--向的右箭头图标是否可见-->
         <attr name="jt_visible" format="boolean"/>
         <!--item布局的内边距-->
         <attr name="paddingLeft" format="dimension"/>
         <attr name="paddingRight" format="dimension"/>
         <attr name="paddingTop" format="dimension"/>
         <attr name="paddingBottom" format="dimension"/>
 
         <attr name="drawable_left" format="reference" />
         <attr name="drawable_right" format="reference" />
         <attr name="line_color" format="color" />
         <attr name="line_height" format="integer" />
     </declare-styleable>
 </resources>

获取到各属性

1 private void initAttrs(Context context, AttributeSet attrs) {
 2         //标题的默认字体颜色
 3         int defaultTitleColor = context.getResources().getColor(R.color.item_group_title);
 4         //输入框的默认字体颜色
 5         int defaultEdtColor = context.getResources().getColor(R.color.item_group_edt);
 6         //输入框的默认的提示内容的字体颜色
 7         int defaultHintColor = context.getResources().getColor(R.color.item_group_edt);
 8 
 9         TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ItemGroup);
10         String title = typedArray.getString(R.styleable.ItemGroup_title);
11         float paddingLeft = typedArray.getDimension(R.styleable.ItemGroup_paddingLeft, 15);
12         float paddingRight = typedArray.getDimension(R.styleable.ItemGroup_paddingRight, 15);
13         float paddingTop = typedArray.getDimension(R.styleable.ItemGroup_paddingTop, 5);
14         float paddingBottom = typedArray.getDimension(R.styleable.ItemGroup_paddingTop, 5);
15         float titleSize = typedArray.getDimension(R.styleable.ItemGroup_title_size, 15);
16         int titleColor = typedArray.getColor(R.styleable.ItemGroup_title_color, defaultTitleColor);
17         String content = typedArray.getString(R.styleable.ItemGroup_edt_content);
18         float contentSize = typedArray.getDimension(R.styleable.ItemGroup_edt_text_size, 13);
19         int contentColor = typedArray.getColor(R.styleable.ItemGroup_edt_text_color, defaultEdtColor);
20         String hintContent = typedArray.getString(R.styleable.ItemGroup_edt_hint_content);
21         int hintColor = typedArray.getColor(R.styleable.ItemGroup_edt_hint_text_color, defaultHintColor);
22         //默认输入框可以编辑
23         boolean isEditable = typedArray.getBoolean(R.styleable.ItemGroup_isEditable, true);
24         //向右的箭头图标是否可见,默认可见
25         boolean showJtIcon = typedArray.getBoolean(R.styleable.ItemGroup_jt_visible, true);
26         typedArray.recycle();
27 
28         //设置数据
29         //设置item的内边距
30         itemGroupLayout.setPadding((int) paddingLeft, (int) paddingTop, (int) paddingRight, (int) paddingBottom);
31         titleTv.setText(title);
32         titleTv.setTextSize(titleSize);
33         titleTv.setTextColor(titleColor);
34 
35         contentEdt.setText(content);
36         contentEdt.setTextSize(contentSize);
37         contentEdt.setTextColor(contentColor);
38         contentEdt.setHint(hintContent);
39         contentEdt.setHintTextColor(hintColor);
40         contentEdt.setFocusableInTouchMode(isEditable); //设置输入框是否可以编辑
41         contentEdt.setLongClickable(false); //输入框不允许长按
42         jtRightIv.setVisibility(showJtIcon ? View.VISIBLE : View.GONE);  //设置向右的箭头图标是否可见
43 }

xml布局文件

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
     tools:context="com.zx.itemgroup.MainActivity">
 
     <com.zx.itemgroup.ItemGroup
         android:id="@+id/name_ig"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:edt_hint_content="请输入姓名"
         app:jt_visible="false"
         app:paddingLeft="15dp"
         app:title="姓名" />
 
     <com.zx.itemgroup.ItemGroup
         android:id="@+id/id_card_ig"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:edt_hint_content="请输入身份证号"
         app:jt_visible="false"
         app:paddingLeft="15dp"
         app:title="身份证" />
 
     <com.zx.itemgroup.ItemGroup
         android:id="@+id/select_birthday_ig"
         android:layout_width="match_parent"
         android:layout_height="46dp"
         app:edt_hint_content="请选择出生日期"
         app:isEditable="false"
         app:paddingLeft="15dp"
         app:title="出生日期" />
 
     <com.zx.itemgroup.ItemGroup
         android:id="@+id/select_city_ig"
         android:layout_width="match_parent"
         android:layout_height="46dp"
         app:edt_hint_content="请选择您所在的城市"
         app:isEditable="false"
         app:paddingLeft="15dp"
         app:title="所在城市" />
 </LinearLayout>

调用的activity

/**
  * 组合控件封装(提交信息及编辑信息界面及功能)
  */
 public class MainActivity extends AppCompatActivity {
 
     private Context mContext;
     private ItemGroup nameIG, idCardIG, birthdayIG, cityIG;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
         mContext = this;
         initView();
     }
 
     private void initView() {
         nameIG = (ItemGroup) findViewById(R.id.name_ig);
         idCardIG = (ItemGroup) findViewById(R.id.id_card_ig);
         birthdayIG = (ItemGroup) findViewById(R.id.select_birthday_ig);
         cityIG = (ItemGroup) findViewById(R.id.select_city_ig);
         birthdayIG.setItemOnClickListener(new ItemGroup.ItemOnClickListener() {
             @Override
             public void onClick(View v) {
                 Toast.makeText(mContext, "点击了选择出生日期", Toast.LENGTH_SHORT).show();
             }
         });
         cityIG.setItemOnClickListener(new ItemGroup.ItemOnClickListener() {
             @Override
             public void onClick(View v) {
                 Toast.makeText(mContext, "点击了选择城市", Toast.LENGTH_SHORT).show();
             }
         });
     }
 }