Android 自定义编辑文本可以正常工作,但某些ViVO设备无法工作

Android 自定义编辑文本可以正常工作,但某些ViVO设备无法工作,android,android-edittext,Android,Android Edittext,我为添加标签创建了一个自定义的编辑文本视图,它对我来说工作正常,但一些vivo设备不工作 场景是,当我键入一个类似于字符a的字符时,字符序列将是'a',然后我键入B,字符序列将是'AB',然后我键入C,字符序列应该是'ABC',但它不接受字符C并删除'B' public class TagEditText extends android.support.v7.widget.AppCompatEditText { TextWatcher textWatcher; String lastStri

我为添加标签创建了一个自定义的编辑文本视图,它对我来说工作正常,但一些vivo设备不工作

场景是,当我键入一个类似于字符a的字符时,字符序列将是'a',然后我键入B,字符序列将是'AB',然后我键入C,字符序列应该是'ABC',但它不接受字符C并删除'B'

 public class TagEditText extends android.support.v7.widget.AppCompatEditText {

TextWatcher textWatcher;
String lastString;
String separator = " ";
CharSequence sts = "";

public TagEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}


private void init() {
    setMovementMethod(LinkMovementMethod.getInstance());

    textWatcher = 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) {
            Log.i("CharSequence1", s.toString());
            sts = s;
        }

        @Override
        public void afterTextChanged(Editable s) {
            Log.i("CharSequence2", s.toString());
            String thisString = s.toString();
            if (thisString.length() > 0 && !thisString.equals(lastString)) {
                format();
            }
        }
    };

    addTextChangedListener(textWatcher);
}


private void format() {


    SpannableStringBuilder sb = new SpannableStringBuilder();
    String fullString = getText().toString();

    String[] strings = fullString.split(separator);
    for (int i = 0; i < strings.length; i++) {

        String string = strings[i];
        sb.append(string);
        if (fullString.charAt(fullString.length() - 1) != separator.charAt(0) && i == strings.length - 1) {
            break;
        }
        BitmapDrawable bd = (BitmapDrawable) convertViewToDrawable(createTokenView(string));
        bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());

        int startIdx = sb.length() - (string.length());
        int endIdx = sb.length();

        sb.setSpan(new ImageSpan(bd), startIdx, endIdx, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        MyClickableSpan myClickableSpan = new MyClickableSpan(startIdx, endIdx);
        sb.setSpan(myClickableSpan, Math.max(endIdx - 2, startIdx), endIdx, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        if (i < strings.length - 1) {
            sb.append(separator);
        } else if (fullString.charAt(fullString.length() - 1) == separator.charAt(0)) {
            sb.append(separator);
        }
    }

    lastString = sb.toString();

    setText(sb);
    setSelection(sb.length());

}

public View createTokenView(String text) {

    LinearLayout l = new LinearLayout(getContext());
    l.setOrientation(LinearLayout.HORIZONTAL);
    l.setGravity(Gravity.CENTER_VERTICAL);
    l.setBackgroundResource(R.drawable.bordered_rectangle_rounded_corners);

    TextView tv = new TextView(getContext());
    l.addView(tv);
    tv.setText(text);
    tv.setPadding(0, 0, 5, 0);
    tv.setTextColor(ContextCompat.getColor(getContext(), R.color.chocolateTextColor));
    tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);

    ImageView im = new ImageView(getContext());
    l.addView(im);
    im.setImageResource(R.drawable.delete_tag);
    im.setScaleType(ImageView.ScaleType.FIT_CENTER);

    return l;
}

public Object convertViewToDrawable(View view) {
    int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    view.measure(spec, spec);
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    c.translate(-view.getScrollX(), -view.getScrollY());
    view.draw(c);
    view.setDrawingCacheEnabled(true);
    Bitmap cacheBmp = view.getDrawingCache();
    Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);
    view.destroyDrawingCache();
    return new BitmapDrawable(getContext().getResources(), viewBmp);
}

private class MyClickableSpan extends ClickableSpan {

    int startIdx;
    int endIdx;

    public MyClickableSpan(int startIdx, int endIdx) {
        super();
        this.startIdx = startIdx;
        this.endIdx = endIdx;
    }

    @Override
    public void onClick(View widget) {
        String s = getText().toString();
        String s1 = s.substring(0, startIdx);
        String s2 = s.substring(Math.min(endIdx + 1, s.length() - 1), s.length());
        TagEditText.this.setText(s1 + s2);
    }

}
}


XML code

<com.thevipgroup.views.TagEditText
        android:id="@+id/tags"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/dp_30"
        android:layout_marginStart="@dimen/dp_30"
        android:layout_marginTop="@dimen/dp_20"
        android:background="@drawable/white_round_semi_transparent"
        android:cursorVisible="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:gravity="center_vertical"
        android:hint="@string/tags_hint"
        android:maxHeight="@dimen/dp_150"
        android:minHeight="@dimen/dp_45"
        android:paddingLeft="@dimen/dp_16"
        android:paddingRight="@dimen/dp_16"
        android:singleLine="true"
        android:textColor="@color/chocolateTextColor"
        android:textColorHint="@color/textHintColorGrey"
        android:textSize="@dimen/sp_15"
        fontpath:customFont="fonts/SF-UI-DISPLAY-REGULAR.TTF" />
public类TagEditText扩展了android.support.v7.widget.appcompatiedittext{
文本观察者文本观察者;
字符串lastString;
字符串分隔符=”;
字符序列sts=“”;
公共标记文本(上下文、属性集属性){
超级(上下文,attrs);
init();
}
私有void init(){
setMovementMethod(LinkMovementMethod.getInstance());
textWatcher=新的textWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
Log.i(“CharSequence1”,s.toString());
sts=s;
}
@凌驾
公共无效后文本已更改(可编辑){
Log.i(“CharSequence2”,s.toString());
String thistring=s.toString();
if(thistring.length()>0&!thistring.equals(lastString)){
格式();
}
}
};
addTextChangedListener(textWatcher);
}
专用void格式(){
SpannableStringBuilder sb=新的SpannableStringBuilder();
String fullString=getText().toString();
String[]strings=fullString.split(分隔符);
for(int i=0;i
String fullString=getText().toString()。在哪个对象/变量上调用此getText()?它是一个自定义编辑文本(TagEditText扩展了AppCompatEditText),因此不需要使用实例调用getText()。