android自定义动态控件

定义动态控件,支持点击最后一个按钮添加一行控件,否则删除当前选中的该行控件。

/** * */ package org.xiangjie.view.blacklist; import java.util.ArrayList; import java.util.List; import org.xiangjie.R; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; /** * @author jie.xiang * */ public class DynamicControl extends LinearLayout { private LayoutInflater mInflater; private TableLayout layout; private int tableRowID; private int dynamicBtnID; private int dynamicPreID; private int dynamicAftID; private List<View> idList = new ArrayList<View>(); /** * @param context */ public DynamicControl(Context context) { this(context, null); } /** * @param context * @param attrs */ public DynamicControl(Context context, AttributeSet attrs) { super(context, attrs); this.mInflater = LayoutInflater.from(context); layout = (TableLayout) mInflater.inflate(R.layout.dynamicvalues, null); // 设置默认值 View view = layout.findViewById(R.id.dynamic_btn_1); view.setOnClickListener(getClickListener()); idList.add(view); tableRowID = R.id.dynamic_row_1; dynamicBtnID = R.id.dynamic_btn_1; dynamicPreID = R.id.dynamic_pre_1; dynamicAftID = R.id.dynamic_aft_1; addView(layout); } private OnClickListener getClickListener() { return new OnClickListener() { @Override public void onClick(View v) { clickLogic(v); } }; } private void clickLogic(View v) { if (!idList.isEmpty()) { if (v == idList.get(idList.size() - 1)) { addControls(v); } else { removeControls(v); } } } private TableRow getNewRow() { TableRow row = getDefaultTableRow(); row.addView(getDefaultImageButton()); row.addView(getDefaultPrevEditText()); row.addView(getDefaultTextView()); row.addView(getDefaultAfterEditText()); return row; } private void addControls(View v) { layout.addView(getNewRow()); ((ImageButton) v).setImageResource(R.drawable.add_btn); } /** * 创建日期为:下午11:02:39<br /> * * 移除选中的控件 * * @param v * @author jie.xiang */ private void removeControls(View v) { if (idList.size() <= 1) { return; } TableRow parent = (TableRow) v.getParent(); ((TableLayout) parent.getParent()).removeView(parent); idList.remove(v); } private TableRow getDefaultTableRow() { tableRowID++; TableRow row = new TableRow(getContext()); android.widget.TableRow.LayoutParams params = new android.widget.TableRow.LayoutParams(); params.width = android.widget.TableRow.LayoutParams.WRAP_CONTENT; params.height = android.widget.TableRow.LayoutParams.WRAP_CONTENT; row.setLayoutParams(params); row.setGravity(Gravity.CENTER); row.setId(tableRowID); return row; } private EditText getDefaultEditText() { EditText text = new EditText(getContext()); android.widget.TableRow.LayoutParams params = new android.widget.TableRow.LayoutParams(); params.width = android.widget.TableRow.LayoutParams.WRAP_CONTENT; params.height = android.widget.TableRow.LayoutParams.WRAP_CONTENT; text.setLayoutParams(params); // text.set text.setMaxLines(1); text.setWidth(80); return text; } private EditText getDefaultPrevEditText() { dynamicPreID++; EditText text = getDefaultEditText(); text.setId(dynamicPreID); return text; } private EditText getDefaultAfterEditText() { dynamicAftID++; EditText text = getDefaultEditText(); text.setId(dynamicAftID); return text; } private TextView getDefaultTextView() { TextView view = new TextView(getContext()); android.widget.TableRow.LayoutParams params = new android.widget.TableRow.LayoutParams(); params.width = android.widget.TableRow.LayoutParams.WRAP_CONTENT; params.height = android.widget.TableRow.LayoutParams.WRAP_CONTENT; view.setLayoutParams(params); view.setText("-"); return view; } private ImageButton getDefaultImageButton() { dynamicBtnID++; ImageButton btn = new ImageButton(getContext()); btn.setAdjustViewBounds(true); android.widget.TableRow.LayoutParams params = new android.widget.TableRow.LayoutParams(); params.width = android.widget.TableRow.LayoutParams.WRAP_CONTENT; params.height = android.widget.TableRow.LayoutParams.WRAP_CONTENT; btn.setLayoutParams(params); btn.setImageResource(R.drawable.add_btn); btn.setBackgroundResource(R.drawable.add_btn); btn.setId(dynamicBtnID); btn.setOnClickListener(getClickListener()); idList.add(btn); return btn; } }

dynamicvalues.xml

<?xml version="1.0" encoding="utf-8"?> <TableLayout android:id="@+id/dynamic_parent" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TableRow android:id="@+id/dynamic_row_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"> <ImageButton android:src="@drawable/add_btn" android:adjustViewBounds="true" android:layout_height="wrap_content" android:id="@+id/dynamic_btn_1" android:layout_width="wrap_content"></ImageButton> <EditText android:text="" android:id="@+id/dynamic_pre_1" android:width="80px" android:layout_width="wrap_content" android:maxLines="1" android:layout_height="wrap_content" android:numeric="integer"></EditText> <TextView android:text="-" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:text="" android:id="@+id/dynamic_aft_1" android:width="80px" android:maxLines="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numeric="integer"></EditText> </TableRow> </TableLayout>

界面效果如下:

唉,上班实在太忙,没有太多时间,这个界面太粗糙,同时ImageButton还有待调整,这个会后续跟进,刚接触不久,还是对API不太熟悉,呵呵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值