【问题标题】:Make buttons remain pressed in Android SDK [duplicate]在Android SDK中使按钮保持按下状态[重复]
【发布时间】:2013-03-04 18:49:57
【问题描述】:

我有 5 个简单的按钮,我希望它们的行为类似于单选按钮,但没有勾选框(或其他名称)。 They are aligned in row and I want only one of them to be selected at once, and when a button is selected it must keep its selected style.我的布局代码如下所示:

        <Button
            android:id="@+id/button1"
            android:layout_width="150dp"
            android:layout_height="fill_parent"
            android:layout_alignParentTop="true"
            android:layout_margin="0dp"
            android:text="@string/mybutton1" />

        <Button
            android:id="@+id/button2"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/button1"
            android:text="@string/mybutton2" />

        // and so on

我的代码:

    mybtn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mybtn1.setPressed(true);
        }
    });

所以,我不知道我是否可以在布局或代码中做到这一点。当我单击它时,有什么方法可以使按钮保持选定状态(和选定样式)? 另外,是否可以将事件分配给所有这些按钮?

谢谢!

【问题讨论】:

  • button.setPressed(true);
  • 我已经尝试过了,但至少在视觉上它没有保持选中状态
  • 显示你的代码你是怎么做的。除非您正在做一个自定义样式来覆盖您的按钮的选定样式,否则这应该可以正常工作。

标签: android button state selected


【解决方案1】:

只需在 onClickListener 中设置它们的选中状态:

myButton.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v)
    {
        //handle click
        v.setSelected(true);
    }
});

点击状态就是被选中的状态,你可以打开和关闭来生效。

【讨论】:

  • 我不知道。当我触摸按钮时,它会变成蓝色背景色,这是我想要的状态。当我按照您上面所说的那样选择它时,它只会将文本和边框的颜色更改为白色,因此看起来有些不同。
  • @ali,您需要创建自己的selector 以获得您想要的颜色和样式行为。
  • 好的。我做到了。如何将事件分配给所有按钮?我可以按标签或类型查找按钮吗?
  • @ali,您的Activity 可以实现接口View.OnClickListener,然后为每个按钮添加XML 属性android:onClick="onClick",或者使用myButton.setOnClickListener(this) 以编程方式设置它们。
【解决方案2】:

如果您希望按钮的行为是将它们用作复选框,您可以使用ToggleButton

在您的情况下,实际上是一个切换按钮列表,当您单击一个时,您必须使用以下方法取消选择所有其他按钮:

for (ToggleButton btn : buttons)
    if (btn != crtButton)
        btn.setChecked(false);

【讨论】:

  • 这会将文本更改为默认的 textOn 和 textOff 。因此,如果我没记错的话,很难为这个切换按钮使用动态设置的文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2012-03-08
  • 2014-09-04
  • 1970-01-01
相关资源
最近更新 更多