现在的位置: 首页 > 编程技术 > 安卓开发 > 正文

可能是最简单的Android带清除功能的输入框

2015年10月20日 安卓开发 ⁄ 共 1888字 ⁄ 字号 可能是最简单的Android带清除功能的输入框已关闭评论 ⁄ 阅读 199 次

在网上看到了很多雷同的,非常精彩的带清除功能的edittext。基本上都是设置CompoundDrawables然后监听onTouch事件和焦点,然后进行处理。这里本文用了一个背景去解决清除按钮和相应的点击事件,貌似比较简单。

1.这个是edittext的背景,最外层的Linearlayout充当了edittext的背景(android:background="@drawable/shape_coupon")

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:background="@drawable/shape_coupon"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/coupon_code"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:background="@null"
            android:hint="请输入帐户名"
            android:padding="10dp"
            android:singleLine="true"
            android:textColorHint="#cccccc"
            android:textSize="14sp" />

        <ImageView
            android:id="@+id/btn_clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginRight="10dp"
            android:background="@drawable/icon_clear"
            android:visibility="gone" />
    </LinearLayout>

2.监听edittext的焦点改变来判断是否显示清除按钮

        coupon_code.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if (!coupon_code.hasFocus()) {
                    btn_clear.setVisibility(View.GONE);
                } else if (coupon_code.length() > 0) {
                    btn_clear.setVisibility(View.VISIBLE);
                }
            }
        });

3.当edittext正在编辑时,根据是否有文字来决定是否显示清除按钮

 coupon_code.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

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

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.toString().length() > 0) {
                    btn_clear.setVisibility(View.VISIBLE);
                } else {
                    btn_clear.setVisibility(View.GONE);
                }

            }
        });

4.点击清除按钮的事件,你可以选择是否同时清除焦点

        btn_clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                coupon_code.setText("");
                //coupon_code.clearFocus();
            }
        });

最后是截图和源代码可能是最简单的Android带清除功能的输入框https://github.com/byedo/ClearableEditText

抱歉!评论已关闭.