Android按钮 – 如何将焦点设置为true并在第一次单击时仍接受onClick侦听器?

UPDATE

我通过从按钮样式中删除两个可聚焦线并使用onClick事件处理程序调用requestFocusFromTouch();来解决点击问题requestFocusFromTouch();

不幸的是,我遇到了一个问题,即requestFocusFromTouch()聚焦了错误的按钮。 它总是聚焦第一个按钮而不是我调用方法的按钮。 这是一个安卓漏洞或预期的行为,我可以做些什么来解决这个问题?

对于onClick事件,代码现在看起来像这样

 public void onClick(View v) { switch (v.getId()) { case R.id.btn_home: Intent i = new Intent(this, QuizMenu.class); startActivity(i); v.requestFocusFromTouch(); break; case R.id.btn_support: Intent i1 = new Intent(this, Support.class); startActivity(i1); v.requestFocusFromTouch(); View btnSupport = findViewById(R.id.btn_support); btnSupport.setSelected(true); btnSupport.requestFocusFromTouch(); break; // More buttons go here (if any) ... } } 

更新结束

我有一个具有以下风格的android按钮

    marquee true true true true wrap_content fill_parent 1dip 1dip 10dp 1 #00FF00 monospace   

我有一个看起来像这样的点击监听器

 public void onClick(View v) { switch (v.getId()) { case R.id.btn_home: Intent i = new Intent(this, HomeScreen.class); startActivity(i); break; // More buttons go here ... } } 

我在按钮上有一个图像,选择器看起来像这样

          

使用按钮和按钮的布局如下所示

  

还有其他按钮,这个布局充当顶级菜单栏,包含在任何布局需要它。

由于可聚焦线条,按钮的onClick事件仅在第二次单击按钮时触发。

  true true 

第一次单击设置焦点按钮然后第二次单击触发onClick事件侦听器我需要将两者组合在一起,以便第一次单击设置焦点并触发onClick事件侦听器。 可以这样做吗?

如果我删除两个可聚焦线条按钮行为正常,但我想显示按钮是聚焦的,我想要按钮内的滚动文本marquee给了我

任何想法都非常感激

您可能需要使用OnFocusChangeListener然后检查焦点事件是否在屏幕处于触摸模式时发生:如果是,那么它是用户点击,否则它来自轨迹球/触控板。

你可以在onClick(View v)这样做:

 ..... v.setFocusableInTouchMode(true); v.requestFocus(); v.setFocusableInTouchMode(false); .....//the others 

所以, v得到焦点,你可以通过setFocusableInTouchMode(false)onClick()做一些事情,它可以在第一次触摸时接受onClick

你可以使用onTouch 。 这样您就可以处理所有点击而无需设置OnFocusChangeListener