UPDATE
我已经通过从按钮样式中删除两个可聚焦线并使用onClick事件处理程序来调用来解决点击问题 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) ...
}
}
Run Code Online (Sandbox Code Playgroud)
更新结束
我有一个具有以下风格的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>
Run Code Online (Sandbox Code Playgroud)
我有一个看起来像这样的点击监听器
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 ...
}
}
Run Code Online (Sandbox Code Playgroud)
我在按钮上有一个图像,选择器看起来像这样
<?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>
Run Code Online (Sandbox Code Playgroud)
使用按钮和按钮的布局如下所示
<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"
/>
...
Run Code Online (Sandbox Code Playgroud)
还有其他按钮,这个布局充当顶级菜单栏,包含在任何布局需要它.
由于可聚焦线条,按钮的onClick事件仅在第二次单击按钮时触发.
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
Run Code Online (Sandbox Code Playgroud)
第一次单击设置焦点按钮然后第二次单击触发onClick事件侦听器我需要将两者组合在一起,以便第一次单击设置焦点并触发onClick事件侦听器.可以这样做吗?
如果我删除两条可聚焦线条,按钮表现正常,但我想显示按钮是聚焦的,我想要按钮内的滚动文字<item name="android:ellipsize">marquee</item>给我
任何想法都非常感激
小智 5
您可以在onClick(View v):
.....
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setFocusableInTouchMode(false);
.....//the others
Run Code Online (Sandbox Code Playgroud)
因此,v获得焦点,您可以onClick()通过进行操作setFocusableInTouchMode(false),它可以onClick在第一时间接受。
| 归档时间: |
|
| 查看次数: |
16638 次 |
| 最近记录: |