设置按钮状态并在点击后保持状态

3

我不确定这是否可能。我有一个按钮:

<Button 
android:id="@+id/b1" 
android:layout_width="wrap_content" 
android:layout_height="45px"
android:drawableTop="@drawable/buttontv"
android:layout_weight="1"
android:background="@null"
android:textColor="#ffffff"
android:textSize="9px"
android:text="TV"/>

这个按钮有以下的xml内容:

<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
 android:state_focused="true"
 android:state_pressed="false"
 android:drawable="@drawable/tv" />
<item
 android:state_focused="true"
 android:state_pressed="true"
 android:drawable="@drawable/tv_pressed" />
<item
 android:state_focused="false"
 android:state_pressed="true"
 android:drawable="@drawable/tv_pressed" />
<item  
 android:drawable="@drawable/tv" />
</selector>

在我的应用程序中,当我点击按钮时,我使用以下代码:

            OnClickListener b1Listener = new OnClickListener(){             
                    @Override
                    public void onClick(View v) {   loadUrl("http://example.org/"); v.setPressed(true); }
            };
            Button b1 = (Button) findViewById(R.id.b1);
            b1.setOnClickListener(b1Listener);

当我按下按钮时,我希望drawableTop设置为具有@drawable/tv_pressed属性值的项目之一,并保持在那里(就像“这是当前活动按钮”)。

我尝试在onClick函数中添加v.setPressed(true)(因为这是我在Google上找到的所有内容),但这并没有起作用。

这能做到吗?还是有更好的替代方案来实现我想要的目标?

4个回答

5

如果您需要一个可以按下并保持活动状态的按钮,请使用ToggleButton


1
他们是...这就是为什么我们总是使用StateListDrawable来处理切换按钮。 - Rich

1

https://dev59.com/3mkw5IYBdhLWcg3woMFD#9750125

    button.setFocusable(true);
    button.setFocusableInTouchMode(true);///add this line

或者使用styles.xml。
    <item name="android:focusable">true</item>
    <item name="android:focusableInTouchMode">true</item>

0
你正在处理对话框/对话框片段吗? 如果是这样,这段代码可能会对你有所帮助,因为我曾经遇到过类似的问题,这个方法对我很有效。 :)
1- 扩展你的类与DialogFragment,重写Onstart()方法。
@Override
public void onStart() {
super.onStart();
final AlertDialog D = (AlertDialog) getDialog();
if (D != null) {
    Button positive = (Button) D.getButton(Dialog.BUTTON_POSITIVE);
    positive.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (edittext.equals("")) {
  Toast.makeText(getActivity(), "EditText empty don't close",Toast.LENGTH_SHORT).show();
            } else {
            D.dismiss(); //dissmiss dialog
            }
        }
    });
}}

0
如上所述,最好使用ToggleButton,但如果您在此情况下使用ListView,则ToggleButton将阻止您的ListView的setOnItemClickListener。您可以通过在ListView布局中将后代添加为被阻止来解决此问题。然而,一些人报告说即使这样做,他们的ListView项目在使用ToggleButton后仍无法点击。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接