2016-11-16 108 views
0

XML提拉:如何保持的ImageButton在按下状态并显示按下状态

<?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/vopressed" /> //light blue 
    <item android:state_selected="true" android:drawable="@drawable/voselected" /> //blue 
    <item android:drawable="@drawable/vo" /> //black 
</selector> 

XML:

<ImageButton 
     android:layout_width="0dp" 
     android:layout_weight="0.2" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/vo_selector" 
     android:id="@+id/ibS" 
     android:background="@android:color/transparent" /> 

我试图改变对点击深蓝后淡蓝色。

ibS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ibS.setPressed(true); 
     Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
    } 
}); 

我怎样才能使它所以当我点击它,它停留在按下/选择的状态,从黑到蓝绘制的变化,当我再次点击它它unpresses /取消选择本身和改回来变黑。

+0

是ibS你的图像按钮? – HendraWD

+0

我在这里看到逻辑错误,因为在OnClickListener中,您将图像按钮的按下状态设置为true,但只要您将手指从按钮上移开,按下的状态就会自动为假 – HendraWD

+0

是的......任何想法如何按下状态一旦点击,然后按下,如果再次点击等等...... – Si8

回答

1

您可以用绘制的选中状态尝试的背景::

ibS.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    ibS.setPressed(true); 
    Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
}}); 

改线ibS.setPressed(true);ibS.setSelected(!ibs.isSelected());

因此,它会将图像的drawable更改为selected_state图像,在drawable中定义的状态也将被选中..然后再次单击..它将恢复最后一个状态... 试试这个......

+0

大多数其他答案的作品,除了这一个“工作”我已经有了。谢谢。 – Si8

0
ibS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
      ibS.setBackground(ContextCompat.getDrawable(your Context,R.drawable.voselected)); 
     Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_LONG).show(); 
    } 
}); 
+0

我怎样才能在两个之间每次点击之间交换? – Si8

+0

谢谢你的回答。 – Si8

1

使用按钮而不是图像按钮,因为在这种情况下,您将需要两个图像资产。

使用绘制:

按钮未按状态:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="@color/colorPrimary" /> 
    <padding android:left="10dp" 
     android:top="10dp" 
     android:right="10dp" 
     android:bottom="10dp" /> 
    <solid android:color="@color/colorPrimary" /> 
</shape> 

按钮按下的状态:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="@color/colorPrimaryDark" /> 
    <padding android:left="10dp" 
     android:top="10dp" 
     android:right="10dp" 
     android:bottom="10dp" /> 
    <solid android:color="@color/colorPrimaryDark" /> 
</shape> 

现在需要时才设置此之上绘制。

+0

drawavles svg drawables – Si8

+0

谢谢你的回答,不管:) – Si8

1

当您从按钮上移开手指时,按下的状态将始终重置为false,因此您无法使用该状态。 您应该通过声明成员变量

private boolean isPressed = false; 

直接跟踪状态。然后你设置的图像按钮直接在按钮按下

ibS.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     isPressed = !isPressed; 
     if (isPressed) { 
      ibS.setBackgroundColor(R.color.your_blue_color); 
      //use code below if you want to use drawable background 
      //ibS.setBackgroundResource(R.drawable.background_pressed); 
     } else { 
      ibS.setBackgroundColor(R.color.your_black_color); 
      //use code below if you want to use drawable background 
      //ibS.setBackgroundResource(R.drawable.background_normal); 
     } 
    } 
}); 
+0

谢谢你的回答。 – Si8

相关问题