Git Product home page Git Product logo

woxingxiao / xedittext Goto Github PK

View Code? Open in Web Editor NEW
511.0 511.0 85.0 7.07 MB

XEditText: clear contents easily; show/hide password; separeta contents automatically, such as credit card number; disable Emoji inputs; 带删除功能的EditText;显示或者隐藏密码;可设置自动添加分隔符分割电话号码、银行卡号等;支持禁止Emoji表情符号输入。

Java 100.00%
android edittext

xedittext's People

Contributors

woxingxiao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xedittext's Issues

disableClear=true 无效

app:x_disableClear="true" 这个属性是禁用删除功能吧,我设置了貌似没有效果
app:x_disableClear="false"
android:hint="pwd input, custom drawables"
android:inputType="textPassword"
app:x_hidePwdDrawable="@mipmap/eyes_close"
app:x_showPwdDrawable="@mipmap/eyes"

Paste string which length beyond MaxLength occur IndexOutOfBoundsException.

java.lang.IndexOutOfBoundsException: setSpan (126 ... 126) ends beyond length 30
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1309)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:680)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:672)
at android.text.Selection.setSelection(Selection.java:76)
at android.text.Selection.setSelection(Selection.java:87)
at android.widget.EditText.setSelection(EditText.java:127)
at com.xw.repo.XEditText.setTextEx(XEditText.java:506)
at com.xw.repo.XEditText.onTextContextMenuItem(XEditText.java:346)
at android.widget.Editor$TextActionModeCallback.onActionItemClicked(Editor.java:3963)
at com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked(DecorView.java:2456)
at com.android.internal.view.FloatingActionMode$3.onMenuItemSelected(FloatingActionMode.java:96)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:167)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:908)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:898)
at com.android.internal.view.FloatingActionMode.lambda$-com_android_internal_view_FloatingActionMode_4856(FloatingActionMode.java:121)
at com.android.internal.view.-$Lambda$IoKM3AcgDw3Ok5aFi0zlym2p3IA.$m$0(Unknown Source:4)
at com.android.internal.view.-$Lambda$IoKM3AcgDw3Ok5aFi0zlym2p3IA.onMenuItemClick(Unknown Source:0)
at com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$2.onClick(FloatingToolbar.java:423)
at android.view.View.performClick(View.java:6303)
at android.view.View$PerformClick.run(View.java:24828)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6798)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

有一个bug

setOnFocusChangeListener监听以后,那个删除图片不显示,不兼容

show password button not visible if inputType is changed programatically

i'm changing input Type of a XEditText in my fragment ( onActivityCreated() method ) like this -

password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

Input type gets changed to password but show password button is not getting visible in edit text.

Can't paste! 无法粘贴数据

app:x_pattern="3,4,4"
app:x_separator=" "
经过测试:要加pattern和separator才可以粘贴,而且separator=""也不可以粘贴

添加分隔符时希望增加开关选项,允许开发者选择添加分隔符的时机

比如,我设置app:pattern="2,2" && app:separator="/",目前XEditText添加分隔符的时机是在用户输入第三个字符时在文本前面插入了"/"字符,但是很多时候需求是需要在用户输入完第二个字符后立马出现"/"分隔符,而不是由第三个字符触发。希望作者能增加一个type选项,允许开发者选择添加分隔符的时机,谢谢。

ClipData NullPointerException

Library version:

com.xw.repo:xedittext:2.0.5

Device info

Galaxy Note4
Android version 6
1.03 GiB FREE SPACE
582.00 MiB FREE RAM

Stacktrace

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ClipData$Item android.content.ClipData.getItemAt(int)' on a null object reference
       at com.xw.repo.XEditText.onTextContextMenuItem(XEditText.java:251)
       at android.widget.Editor$TextActionModeCallback.onActionItemClicked(Editor.java:3666)
       at com.android.internal.policy.PhoneWindow$DecorView$ActionModeCallback2Wrapper.onActionItemClicked(PhoneWindow.java:4234)
       at com.android.internal.view.FloatingActionMode$4.onMenuItemSelected(FloatingActionMode.java:108)
       at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:801)
       at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:155)
       at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:954)
       at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:944)
       at com.android.internal.view.FloatingActionMode$5.onMenuItemClick(FloatingActionMode.java:136)
       at com.android.internal.widget.FloatingToolbar$FloatingToolbarMainPanel$1.onClick(FloatingToolbar.java:1282)
       at android.view.View.performClick(View.java:5697)
       at android.widget.TextView.performClick(TextView.java:10826)
       at android.view.View$PerformClick.run(View.java:22526)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:158)
       at android.app.ActivityThread.main(ActivityThread.java:7225)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

反馈两个问题

1.密码长度默认设置为20了,无法输入超过20位的密码
2.超过长度以后,删除按钮会出现位置错乱

密码框输入过长时,清除图标移动适配可以这样修改(仅供参考)

本着不大改的逻辑,因为删除按钮是绘制上去的,唯一问题就是当输入框内容过多,内容就可以滚动,就会把删除按钮顶掉,
所以需要在长度部分加上滚动的距离就行,(唯一需要注意的就是在xml里面把drawablePadding设置你删除按钮的宽度+间距即可),仅供参考

@OverRide
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (hasFocused && mBitmap != null && isPwdInputType && !isTextEmpty()) {
if (mLeft * mTop == 0) {
mLeft = getMeasuredWidth() - getPaddingRight() -
mTogglePwdDrawable.getIntrinsicWidth() - mBitmap.getWidth() - mPadding;
mTop = (getMeasuredHeight() - mBitmap.getHeight()) >> 1;
}
if (getScrollX() > 0) {
canvas.drawBitmap(mBitmap, mLeft + getScrollX(), mTop, null);
} else {
canvas.drawBitmap(mBitmap, mLeft, mTop, null);
}
}
}

清除的Drawable显示不出来

当为XEditText添加android:gravity = center属性时,清除的Drawable图标不见了,但是那个眼睛还在。
我在清除drawable的图标的位置上点击,EditText的内容还是会被清除。
这应该是一个BUG

无法自动调出键盘

没仔细看源码,不知道这是bug还是有意设计的。我试了一下,无法自动调出键盘,而且强制调出键盘的话,键盘会闪一下才出来

调用系统的复制功能崩溃

如果设置了XEditText的最大长度,然后调用系统的复制功能,而且复制的长度超过了设置的最大长度,会导致setTextEx方法类调用setSelection时数组长度溢出崩溃,建议那里改成setSelection(getText().lenght())

在XML设置了digits属性之后,密码是否明文的按钮,无法显示

如标,代码如下:
<com.xw.repo.XEditText
android:id="@+id/etPw"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginStart="5dp"
android:background="@null"
android:digits="@string/filter_code"
android:hint="@string/goldcoin_register_pw_hint"
android:inputType="textPassword"
android:maxLength="20"
android:maxLines="1"
android:textColor="@color/txt_666"
android:textColorHint="@color/txt_666"
android:textSize="14sp" />

清除密码的按键无法显示

按以下布局来写,清除密码的按键总是显示不出来。
<com.xw.repo.XEditText
android:id="@+id/et_new_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:gravity="right"
android:hint="请输入新密码"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:singleLine="true"
android:textSize="14sp"
app:x_clearDrawable="@drawable/delete_selector" />

Galaxy S7 Edge

Attempt to invoke virtual method 'android.content.ClipData$Item android.content.ClipData.getItemAt(int)' on a null object reference
com.xw.repo.XEditText.onTextContextMenuItem(XEditText.java:312)

disable emoji disables max Lenght

If XEditText has the maximum number of characters set via android: maxLenght and the disableEmoji is enabled, the maxLenght stops working

Layout example:

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/nameLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="8dp"
        android:layout_marginStart="24dp"
        android:layout_marginEnd="24dp"
        app:errorEnabled="true"
        app:boxBackgroundMode="filled"
        app:counterEnabled="true"
        app:counterMaxLength="100">

        <com.xw.repo.XEditText
            android:id="@+id/nameView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:paddingTop="16dp"
            android:background="@android:color/transparent"
            android:hint="@string/regist_name"
            android:inputType="textPersonName"
            android:singleLine="true"
            android:maxLength="100"
            app:x_disableEmoji="true" />

    </com.google.android.material.textfield.TextInputLayout>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.