设置Button状态并在onClick之后保留它

时间:2011-02-22 15:51:50

标签: android button

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

<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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

https://stackoverflow.com/a/9750125/1257369

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

或使用styles.xml

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

答案 2 :(得分:0)

如上面的答案所述,使用togglebutton是理想的,但如果你在这个场景中使用listview,那么togglebutton将阻止你的listview的setOnItemClickListener。您也可以通过在listview布局中添加已阻止的后代来解决该问题。然而有些人报告说,即使这样,他们的listview项目也不会在使用切换按钮后点击。

答案 3 :(得分: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
            }
        }
    });
}}