2017-04-06 75 views
1

我试图在活动的软键盘上添加onClick。原因是我想检查用户是否当前处于活动状态。所以我所做的是,如果用户点击应用程序,我会重置一个不活动计时器。问题是,当用户与软键盘交互时,它不会调用功能onUserInteraction(),这是我在活动中重写的功能。所以我需要帮助,找到一种方法来跟踪软键盘已被点击每个文本字段等我在活动中。 (我知道我可以在每个EditText字段中插入一个onclick查找器,但是我宁愿不这样做,因为如果我将使用许多EditText字段,它将不会那么好)Android在活动上添加onClick软键盘

+0

你能不能细说一下。当前活动的含义是什么 - 如果应用程序已打开或用户正在屏幕上执行操作? – Praga

+0

@Praga这意味着用户正在屏幕上执行操作。 – Linussjo

+0

然后你不需要依赖键盘操作。你可以与Faa km的答案一起去。 – Praga

回答

0

所以这是我结束了。我希望有其他的东西,但是这解决了这个问题。谢谢您的帮助!

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

您可以使用onUserInteraction()函数的活动。您需要在您的活动中重写此功能。 此功能可在您与您的活动进行任何形式的互动时接听电话。

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

你可以参考this examplealso this answer,请参阅该文档

希望这有助于。

+0

正如我在说明中所说的,我已经覆盖了该方法,但它似乎没有响应软键盘的交互。 – Linussjo

+0

您可以扩展edittext来创建customedittext并在其中添加textwatcher或处理onclick来检查您的不活动计时器 –

0

要处理单个按键,请根据需要实施onKeyDown()或onKeyUp()。通常,如果你想确保你只接收一个事件,你应该使用onKeyUp()。如果用户按下并按住按钮,则会多次调用onKeyDown()。

+0

试图在活动上实现它。但是,与软键盘 – Linussjo

+0

进行交互时,不会调用键盘是不同的窗口。如果您不需要跟踪用户输入的内容,可以考虑在每个编辑文本中添加一个全局textWatcher,并监听每次用户输入时都会调用的文本更改。 – Praga

+0

是的,我知道这个问题的解决方案。我虽然希望有一个解决方案,我可以在活动中实现,而不是每个编辑文本。但是,如果没有这样的解决方案,我将不得不回到那一个。 – Linussjo

0

创建一个类的一些东西一样UserInteractionEditText,延长EditText,并设置在类的onclick lisetener使用该类中的所有XML的布局,你使用EditText你可以做一些这样的事:

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