Android 自定义控件

android中可以通过继承LinearLayout来实现自定义控件,今天写了一个EditText和ImageView结合的自定义控件:

首先是控件的基本布局


    
    

    
    

    
     
     

    
     
     

    
     
     


    
    


这是自定义控件的实现主代码
/**
 * Created by ukfire on 15-7-13.
 */
public class MyEditText extends LinearLayout implements View.OnClickListener {

    private ImageView left;
    private EditText edit;
    private ImageView right;
    private LinearLayout view;

    public MyEditText(Context context) {
        super(context);
        init();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);
        float textSize = ta.getDimension(R.styleable.MyView_textSize, 18);
        edit.setTextSize(textSize);
        ta.recycle();
    }

    public void init() {
        view = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.keke_edittext, this, true);
        view.setBackgroundResource(R.drawable.normalborder);
        left = (ImageView) view.findViewById(R.id.LeftImageView);
        edit = (EditText) view.findViewById(R.id.MyEditText);
        right = (ImageView) view.findViewById(R.id.RightImageButton);
        right.setVisibility(View.GONE);
        right.setOnClickListener(this);
        edit.addTextChangedListener(mTextWatcher);
        edit.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    view.setBackgroundResource(R.drawable.activeborder);
                    if (edit.getText().toString().length() != 0)
                        right.setVisibility(View.VISIBLE);
                } else {
                    view.setBackgroundResource(R.drawable.normalborder);
                    right.setVisibility(View.GONE);
                }
            }
        });
    }

    TextWatcher mTextWatcher = new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            ErKe(s);
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            ErKe(s);
        }


        @Override
        public void afterTextChanged(Editable s) {
            if (s.length() == 0)
                right.setVisibility(view.GONE);
        }

        private void ErKe(CharSequence s) {
            if (s.length() != 0)
                right.setVisibility(View.VISIBLE);
            else
                right.setVisibility(View.GONE);
        }
    };

    public void setLeftImageView(int resId) {
        left.setImageResource(resId);
    }

    public void setRightImageButton(int resId) {
        right.setImageResource(resId);
        right.setVisibility(View.GONE);
    }

    public void setHint(String s) {
        edit.setHint(s);
    }

    public String getText() {
        return edit.getText().toString();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.RightImageButton:
                edit.setText("");
                right.setVisibility(View.GONE);
                break;
            default:
                break;
        }
    }
}


接下来是调用这个控件

     
     

    
      
      

    
      
      

    
      
      


     
     


在主界面设置自己想要的样式
public class MainActivity extends Activity {
    private MyEditText myEditText;
    private MyEditText myEditText1;
    private MyEditText myEditText2;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myEditText = (MyEditText) findViewById(R.id.myEdit);
        myEditText1 = (MyEditText) findViewById(R.id.myEdit1);
        myEditText2 = (MyEditText) findViewById(R.id.myEdit2);
        myEditText.setLeftImageView(R.drawable.people);
        myEditText.setRightImageButton(R.drawable.delete);
        myEditText.setHint("用户名");

        myEditText1.setRightImageButton(R.drawable.delete);
        myEditText1.setHint("用户名");

        myEditText2.setLeftImageView(R.drawable.search);
        myEditText2.setHint("搜索");
    }
}

效果图如下:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值