簡體   English   中英

單擊開發的EditText時鍵盤不顯示

[英]Keyboard is not showing up when clicked on developed EditText

我試圖在我的項目上使用這個有用的庫,但是在使用它並單擊EditText鍵盤沒有顯示,這個簡單的類作為庫部署了EditText

public class AlachiqMakeLink extends EditText {

    private static final String TAG = AlachiqMakeLink.class.getSimpleName();
    private static final String DEFAULT_TEXT_COLOR = "FFFFFF";

    private String mParkedText = "";
    private boolean mIsBoldParkedText = true;
    private String mParkedTextColor = DEFAULT_TEXT_COLOR;
    private String mParkedHintColor = DEFAULT_TEXT_COLOR;

    private String mText = null;
    private enum TypingState {
        Start, Typed
    }
    private TypingState mTypingState = TypingState.Start;

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

    public AlachiqMakeLink(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AlachiqMakeLink(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AlachiqMakeLink, defStyleAttr, 0);

        mParkedText = a.getString(R.styleable.AlachiqMakeLink_parkedText);
        if (mParkedText == null) {
            mParkedText = "";
        }

        String hint = a.getString(R.styleable.AlachiqMakeLink_parkedHint);

        mParkedTextColor = a.getString(R.styleable.AlachiqMakeLink_parkedTextColor);
        if (mParkedTextColor == null) {
            mParkedTextColor = AlachiqMakeLink.DEFAULT_TEXT_COLOR;
        }

        mParkedHintColor = a.getString(R.styleable.AlachiqMakeLink_parkedHintColor);
        if (mParkedHintColor == null) {
            mParkedHintColor = AlachiqMakeLink.DEFAULT_TEXT_COLOR;
        }

        mIsBoldParkedText = a.getBoolean(R.styleable.AlachiqMakeLink_parkedTextBold, true);

        init();

        if (hint != null) {
            setPlaceholderText(hint);
        }

        a.recycle();
    }

    private void init() {
        mText = "";
        observeText();

        mTypingState = TypingState.Start;
        addTextChangedListener(new ParkedTextViewWatcher(this));
    }

    public String getParkedText() {
        return mParkedText;
    }

    private int getBeginningPositionOfParkedText() {
        int position = mText.length() - mParkedText.length();
        if (position < 0) {
            return 0;
        }
        return position;
    }

    private void goToBeginningOfParkedText() {
        setSelection(getBeginningPositionOfParkedText());
    }

    private String getTypedText() {
        if (mText.endsWith(mParkedText)) {
            return mText.substring(0, getBeginningPositionOfParkedText());
        }
        return mText;
    }

    private void setTypedText(String typedText) {
        mText = typedText;
        observeText();

        textChanged();
    }

    private void setEmptyText() {
        setTypedText("");
    }

    public void setPlaceholderText(String placeholderText) {
        Spanned hint = null;
        String parkedTextColor = reformatColor(mParkedTextColor);
        String parkedHintColor = reformatColor(mParkedHintColor);
        if (mIsBoldParkedText) {
            hint = Html.fromHtml(String.format("<font color=\"#%s\">%s</font><font color=\"#%s\"><b>%s</b></font>", parkedHintColor, placeholderText, parkedTextColor, mParkedText));
        } else {
            hint = Html.fromHtml(String.format("<font color=\"#%s\">%s</font><font color=\"#%s\">%s</font>", parkedHintColor, placeholderText, parkedTextColor, mParkedText));
        }
        super.setHint(hint);
    }

    // Call when TypedText is changed
    private String observeText() {
        return mText = getTypedText() + mParkedText;
    }

    private String reformatColor(String color) {
        if (color.startsWith("#")) {
            color = color.substring(1);
        }

        if (color.length() > 6) {
            return color.substring(2);
        }
        return color;
    }

    private Spanned getHtmlText() {
        String parkedTextColor = reformatColor(mParkedTextColor);
        if (mIsBoldParkedText) {
            return Html.fromHtml(String.format("<font color=\"#%s\">%s</font><font color=\"#%s\"><b>%s</b></font>", parkedTextColor, getTypedText(), parkedTextColor, mParkedText));
        }
        return Html.fromHtml(String.format("<font color=\"#%s\">%s</font>", parkedTextColor, getTypedText() + mParkedText));
    }

    private void textChanged() {
        switch (mTypingState) {
            case Start:
                if (mText.length() <= 0) {
                    return;
                }
                setText(getHtmlText(), BufferType.SPANNABLE);
                goToBeginningOfParkedText();

                mTypingState = TypingState.Typed;

            case Typed:
                if (mText.equals(mParkedText)) {
                    mTypingState = TypingState.Start;
                    setText(getHtmlText(), BufferType.SPANNABLE);
                    return;
                }

                setText(getHtmlText(), BufferType.SPANNABLE);

                goToBeginningOfParkedText();

            default:
                break;
        }
    }

    private static class ParkedTextViewWatcher implements TextWatcher {

        private AlachiqMakeLink mAlachiqMakeLink;
        private boolean         mIsDeleteText;

        public ParkedTextViewWatcher(AlachiqMakeLink alachiqMakeLink) {
            this.mAlachiqMakeLink = alachiqMakeLink;
        }

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

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (before > 0) {
                mIsDeleteText = true;
            } else {
                mIsDeleteText = false;
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            mAlachiqMakeLink.removeTextChangedListener(this);

            String text = s.toString();
            if (mIsDeleteText) {

                if (text.length() < mAlachiqMakeLink.getParkedText().length()) {
                    mAlachiqMakeLink.setEmptyText();
                } else {
                    String parkedText = text.substring(mAlachiqMakeLink.getBeginningPositionOfParkedText() - 1);
                    if (!parkedText.equals(mAlachiqMakeLink.getParkedText())) {
                        mAlachiqMakeLink.setEmptyText();
                    } else {
                        mAlachiqMakeLink.setTypedText(text);
                    }
                }
            } else {
                mAlachiqMakeLink.setTypedText(text);
            }

            mAlachiqMakeLink.addTextChangedListener(this);
        }
    }
}

您可以通過添加切換按鈕來強制顯示或隱藏鍵盤

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    if (imm.isActive()){
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // hide
    } else {
        imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); // show
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM