简体   繁体   中英

Android adding onClick on soft keyboard on activity

I am trying to add an onClick on the soft keyboard for an activity. The reason why is that i want to check if the user is currently active. So what i have done is that if the user clicks on the app i will reset a inactivity timer. The problem is that when a user interacts with the soft keyboard it doesn't call the function onUserInteraction() which is a function I override in the activity. So i need help to find a way to keep track if the soft keyboard has been clicked for every textfield etc I have in the activity. (I know that i can insert a onclick listerner on every EditText field but i rather not do that, because if I would use many EditText fields it would not be so nice)

To handle an individual key press, implement onKeyDown() or onKeyUp() as appropriate. Usually, you should use onKeyUp() if you want to be sure that you receive only one event. If the user presses and holds the button, then onKeyDown() is called multiple times.

Create a class some thing like UserInteractionEditText and extend EditText and set the onclick lisetener in that class use that class in all the XML layouts as you use EditText you can do some thing like this:

    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
    }
}

So this is what i ended up with. I was hoping for something else, but this solves the problem. Thanks for the help!

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);
        }
    }

You can use onUserInteraction() function of activity. You need to override this function in your activity. This function get calls when you perform any kind of interaction with your activity.

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

You can refer this example and also this answer , refer the docs here

Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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