繁体   English   中英

Android在活动上添加onClick在软键盘上

[英]Android adding onClick on soft keyboard on activity

我正在尝试在活动的软键盘上添加onClick。 原因是我要检查用户当前是否处于活动状态。 所以我所做的是,如果用户单击该应用程序,我将重置一个不活动计时器。 问题在于,当用户与软键盘进行交互时,它不会调用函数onUserInteraction() ,该函数是我在活动中覆盖的函数。 因此,我需要帮助以找到一种方法来跟踪我是否在活动中针对每个文本字段等单击了软键盘。 (我知道我可以在每个EditText字段上插入一个onclick listerner,但我宁愿不这样做,因为如果我使用许多EditText字段,那就不太好了)

要处理单个按键,请适当地实现onKeyDown()或onKeyUp()。 通常,如果要确保仅收到一个事件,则应使用onKeyUp()。 如果用户按住按钮,则会多次调用onKeyDown()。

创建一个类似于UserInteractionEditText类的类,并扩展EditText并设置该类中的onclick lisetener,在您使用EditText在所有XML布局中使用该类,您可以执行以下操作:

    public class UserInteractionEditText extends EditText implements View.OnClickListener {


    public UserInteractionEditText(Context context) {
        super(context);
    }

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

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


    @Override
    public void onClick(View v) {
        //TODO:: Handle user Click Events
    }
}

这就是我最终得到的。 我希望有其他东西,但这可以解决问题。 谢谢您的帮助!

public class ActivityEditText extends android.support.v7.widget.AppCompatEditText {
        private TextWatcher tw;
        public ActivityEditText(Context c)
        {
            super(c);
            this.setOurTCL();
        }

        public ActivityEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.setOurTCL();
        }

        public ActivityEditText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            this.setOurTCL();
        }

        private void setOurTCL()
        {
            this.tw = new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    InactivityManager.resetTime();
                }

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

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            };
            this.addTextChangedListener(this.tw);
        }

        @Override
        public void removeTextChangedListener(TextWatcher watcher) {
            if(!watcher.equals(this.tw))
                super.removeTextChangedListener(watcher);
        }
    }

您可以使用活动的onUserInteraction()函数。 您需要在活动中覆盖此功能。 当您与活动进行任何形式的交互时,此函数都会调用。

 @Override
    public void onUserInteraction() {
        super.onUserInteraction();
        // Your code goes here
    }

您可以参考此示例以及此答案 ,请参考此处的文档

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM