如何使ImageButton表现为ToggleButton

时间:2013-07-25 18:42:51

标签: android button themes imagebutton togglebutton

我希望我的Android按钮有一些属性:

  1. 拥有Android HoloLight风格
  2. 表现为ImageButton - 将图像作为其内容,而不是文本
  3. 表现为ToggleButton - 切换开/关状态
  4. 所以我的代码目前看起来像这样:

    我的xml文件:

    <ImageButton
        android:id="@+id/button"
        style="@android:style/Widget.Holo.Light.Button.Toggle"
        android:layout_width="70px"
        android:layout_height="70px"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_margin="5dp"
        android:src="@drawable/icon" />
    

    我的java文件:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_file);
    
        Button button = (ImageButton) findViewById(R.id.button);
    
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.v(log, "button pressed");
    
                if (skillsButton.isSelected()) {
                    Log.v(log, "button is unselected");
                    button.setSelected(false);
                } else {
                    Log.v(log, "button is selected");
                    button.setSelected(true);
                }
            }
        });
    }
    

    当我运行我的代码并单击按钮时,我可以看到我的按钮有一个图像作为其描述,看起来像一个Android HoloLight ToggleButton,但它没有打开和关闭,因为我按下它(蓝色的光没有开启。)

    我可以看到按钮的isSelected()状态在LogCat上正在改变。

    是否有我想要的解决方案?

    另外,据我所知,Android HoloLight主题按钮的“颜色”固定为浅灰色。有没有办法将这种颜色改为另一种颜色,最好是白色?

2 个答案:

答案 0 :(得分:0)

这就是我所做的,所以我可以有2个或3个Buttons图片切换并位于RadioGroup中,因此一次只能选择一个。

将其设为ToggleButton

<ToggleButton
android:id="@+id/button"
style="@android:style/CustomButton   // Note the style
android:layout_width="70px"
android:layout_height="70px"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="5dp" />

res/styles

中创建上面引用的样式
<style name="CustomButton" parent="@android:style/Widget.CompoundButton">  // you can change the parent here depending on what you need
    <item name="android:background">@drawable/icon</item>
    <item name="android:textOff"></item>
    <item name="android:textOn"></item>
    //  add other properties if you need
</style>

在我的@drawable/cold_button引用了一个选择器,因为它在按下时会发生变化,但您可以只是background的图像

答案 1 :(得分:0)

我的建议是为您的按钮提供拖车。一对一状态和一个关闭状态,“开”状态可绘制具有右侧蓝色和“关闭”状态按钮具有左侧蓝色。之后,您必须在按钮上设置OnTouchListener,如下所示:

@Override
public boolean onTouch(View v, MotionEvent event) {
    if(event.getAction()==MotionEvent.ACTION_DOWN){
        float x=event.getX();
        if(x<=v.getWidth()/2){
            v.setBackgroundResource(R.drawable.off);
            state=0;
        }else{
            v.setBackgroundResource(R.drawable.on);
            state=1;
        }
    }
    return false;
}