UPDATE
我通过从按钮样式中删除两条可聚焦线并使用 onClick 事件处理程序来调用来解决了点击问题requestFocusFromTouch();
不幸的是,我遇到了 requestFocusFromTouch() 聚焦错误按钮的问题。它始终聚焦第一个按钮,而不是我调用该方法的按钮。这是 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) ...
}
}
更新结束
我有一个具有以下样式的 Android 按钮
<?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 ...
}
}
我的按钮上有一个图像,选择器看起来像这样
<?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>
使用按钮和按钮的布局如下所示
<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"
/>
...
还有其他按钮,此布局充当顶部菜单栏,包含在任何需要的布局中。
由于可聚焦线,按钮的 onClick 事件仅在第二次单击按钮时触发。
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
第一次单击将焦点设置在按钮上,然后第二次单击触发 onClick 事件侦听器
我需要将两者组合在一起,以便第一次单击设置焦点并触发 onClick 事件侦听器。这可以做到吗?
如果我删除两条可聚焦线,按钮将正常运行,但我想显示该按钮已聚焦,并且我希望按钮内的滚动文本<item name="android:ellipsize">marquee</item>
给我
任何想法都非常感激