Androidbutton – 如何将焦点设置为true,并仍然接受第一次点击onClick监听器?

UPDATE

我已经解决了点击问题,通过从button样式中删除两条可聚焦的线条,并使用onClick事件处理函数来调用requestFocusFromTouch();

不幸的是我留下了一个问题,requestFocusFromTouch()把错误的button聚焦。 它始终关注第一个button,而不是我称之为方法的button。 这是一个Android错误或预期的行为,我可以做什么工作?

代码现在看起来像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) ... } } 

更新结束

我有一个Androidbutton,具有以下风格

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MnuBtnStyle"> <item name="android:ellipsize">marquee</item> <item name="android:scrollHorizontally">true</item> <item name="android:focusable">true</item> <item name="android:focusableInTouchMode">true</item> <item name="android:singleLine">true</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_marginTop">1dip</item> <item name="android:layout_marginBottom">1dip</item> <item name="android:textSize">10dp</item> <item name="android:layout_weight">1</item> <item name="android:textColor">#00FF00</item> <item name="android:typeface">monospace</item> </style> </resources> 

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

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

我在button上有一个图像,select器看起来像这样

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/ic_tab_home_pressed" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/ic_tab_home_pressed" /> <!-- pressed --> <item android:drawable="@drawable/ic_tab_home_unpressed" /> <!-- default/unchecked --> </selector> 

使用button和button的布局如下所示

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:id="@+id/top_menu_bar" android:layout_marginTop="2dip" android:padding="0dip" android:background="@android:drawable/bottom_bar" android:layout_alignParentTop="true" android:gravity="top" android:layout_height="@dimen/menu_bar_height" android:layout_width="fill_parent"> <Button android:id="@+id/btn_home" android:text="@string/btn_home" android:drawableTop="@drawable/home_button" style="@style/MnuBtnStyle" /> ... 

还有其他的button,这个布局是作为一个顶级菜单栏,包含在任何布局需要它。

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

  <item name="android:focusable">true</item> <item name="android:focusableInTouchMode">true</item> 

第一次点击集合集中在button上,然后第二次点击触发我需要将两者结合在一起的onClick事件监听器,以便第一次单击设置焦点并触发onClick事件监听器。 可以这样做吗?

如果我删除两个可聚焦的线button的行为正常,但我想要显示的button是集中,我想button内的滚动文本<item name="android:ellipsize">marquee</item>给我

任何想法不胜感激

Solutions Collecting From Web of "Androidbutton – 如何将焦点设置为true,并仍然接受第一次点击onClick监听器?"

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

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

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

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