您的位置:首页 > 移动开发 > Android开发

Android:自定义组合控件之动态删减编辑框

2016-04-20 18:33 621 查看
需求:



点击x删除当前行

点击Add增加一行

Step1 组合布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/item_height">
<EditText
android:id="@+id/et_text"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="@null"
/>

<!--此处设置的是Item右侧的删除图标,用的是iconfont,可根据实际需要替换-->
<com.cuitrip.business.tripservice.ui.IconTextView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/close"
android:textSize="@dimen/ct_ts_16"
android:visibility="gone"
/>
</LinearLayout>

<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#ded8d7"
/>

</LinearLayout>


Step2 设置自定义属性

在attrs.xml文件中添加如下属性(用于设置提示文字):

<declare-styleable name="CombinationItemView">
<attr name="cvTextHint" format="string"/>
</declare-styleable>


Step3 编写自定义View

构造函数

public CombinationItemView(Context context) {
this(context,null);
}
public CombinationItemView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}

public CombinationItemView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//获取自定义属性
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CombinationItemView, defStyleAttr, 0);
textHint = a.getString(R.styleable.CombinationItemView_cvTextHint);
a.recycle();
//初始化方法
init();
}


在初始化方法中加载布局

private void init() {
view = LayoutInflater.from(getContext()).inflate(R.layout.item_comb, this);
ButterKnife.bind(this);
//当item获取焦点时,显示删除图标
etText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
ivIcon.setVisibility(VISIBLE);
}else{
ivIcon.setVisibility(GONE);
}
}
});
//设置提示文字
setTextHint(textHint);
}


点击Item右侧图标删除当条view

@Override
public boolean onTouchEvent(MotionEvent event) {
//判断手指是否触摸到右侧图标
if (event.getX()>=etText.getRight()){
removeAllViews();
return true;
}
return super.onTouchEvent(event);
}


以上为自定义组合控件部分内容

点击增加item

@OnClick(R.id.tv_add)//这里的id是需要点击的button的id
public void addItem(){
CombinationItemView combinationItemView = new CombinationItemView(getActivity());
//获取button在布局中的position(parent为LinearLayout)
int i = container.indexOfChild(tvAdd);
//将动态生成的item添在button原来的位置上
container.addView(combinationItemView,i);
}


完毕!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息