如何在滚动视图中触摸按钮时更改按钮的颜色?
How can I change the color of button, when its touched, in a scrollview?
我正在尝试制作一个包含 3 个按钮的滚动视图,我想让这三个按钮在触摸时改变颜色;但是,当我尝试设置一个 onTouchListener 时,触摸时按钮会改变颜色,但是当我抬起手指时,它没有改变。无论如何我可以做到这一点吗?
这是我拥有的 onTouch 和 onClick 侦听器的示例:
callButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
callButton.setBackgroundColor(Color.parseColor("#b20000"));
} else if (event.getAction() == MotionEvent.ACTION_UP) {
callButton.setBackground(getDrawable(R.drawable.buttonshape1));
}
return false;
}
});
callButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phno = "314-605-4110";
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phno));
startActivity(intent);
}
});
这是我的 XML 滚动视图:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
tools:context="com.google.helpstl2.VariableLocation">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="vertical">
<Button
android:id="@+id/callButton"
android:textAllCaps="false"
android:text="Give us a call "
android:textColor="#4E4E4E"
android:textSize="15sp"
android:background="@drawable/buttonshape"
android:gravity="center_vertical|center_horizontal"
android:paddingLeft="130dp"
android:paddingRight="130dp"
android:drawablePadding="-8dp"
android:layout_width="match_parent"
android:layout_height="47dp"
android:layout_below="@+id/imageOverlay"
android:onClick="phoneClick"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/mapbackground"
android:id="@+id/mapLay"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_below="@+id/callButton"
android:weightSum="1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="9dp">
<fragment
android:layout_width="match_parent"
android:layout_height="220dp"
android:name="com.google.android.gms.maps.MapFragment"
android:id="@+id/placeMap"
android:background="@drawable/mapbackground"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_gravity="center_vertical"
android:duplicateParentState="true"
android:layout_margin="2dp"
android:layout_marginBottom="50dp" />
</LinearLayout>
<Button
android:id="@+id/directionsButton"
android:textAllCaps="false"
android:text="Come see us"
android:textColor="#000000"
android:textSize="14sp"
android:paddingLeft="10dp"
android:gravity="center_vertical"
android:drawablePadding="10dp"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/buttonshape1"
android:onClick="directionsClick"
android:singleLine="false"
android:layout_marginTop="9dp"
android:layout_below="@+id/mapLay"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp" />
<Button
android:id="@+id/moreInfoButton"
android:textAllCaps="false"
android:text="More Info"
android:textColor="#000000"
android:textSize="14sp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:drawablePadding="10dp"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/buttonshape2"
android:onClick="directionsClick"
android:singleLine="false"
android:layout_below="@+id/directionsButton"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>
如果您想永久更改颜色,那么您应该删除 View.TouchListener 实施并在按钮点击中执行
callButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callButton.setBackgroundColor(Color.parseColor("#b20000"));
}
});
如果你只想在按下按钮时改变颜色,你应该在 drawable 中进行 (@drawable/buttonshape
)。例如,此元素在按下时会将颜色更改为蓝色。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape><solid android:color="@color/blue" /></shape>
</item>
<item>
<shape><solid android:color="@color/white"/></shape>
</item>
</selector>
您不应该为此实现 onTouchListener。
在您的可绘制对象中创建此 selector_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--button color pressed -->
<item android:drawable="@android:color/black" android:state_pressed="true"></item>
<!--button color normal -->
<item android:drawable="@android:color/transparent"></item></selector>
你的按钮布局:
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_button"
android:text="abc"
/>
我正在尝试制作一个包含 3 个按钮的滚动视图,我想让这三个按钮在触摸时改变颜色;但是,当我尝试设置一个 onTouchListener 时,触摸时按钮会改变颜色,但是当我抬起手指时,它没有改变。无论如何我可以做到这一点吗?
这是我拥有的 onTouch 和 onClick 侦听器的示例:
callButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
callButton.setBackgroundColor(Color.parseColor("#b20000"));
} else if (event.getAction() == MotionEvent.ACTION_UP) {
callButton.setBackground(getDrawable(R.drawable.buttonshape1));
}
return false;
}
});
callButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phno = "314-605-4110";
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phno));
startActivity(intent);
}
});
这是我的 XML 滚动视图:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
tools:context="com.google.helpstl2.VariableLocation">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="vertical">
<Button
android:id="@+id/callButton"
android:textAllCaps="false"
android:text="Give us a call "
android:textColor="#4E4E4E"
android:textSize="15sp"
android:background="@drawable/buttonshape"
android:gravity="center_vertical|center_horizontal"
android:paddingLeft="130dp"
android:paddingRight="130dp"
android:drawablePadding="-8dp"
android:layout_width="match_parent"
android:layout_height="47dp"
android:layout_below="@+id/imageOverlay"
android:onClick="phoneClick"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/mapbackground"
android:id="@+id/mapLay"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_below="@+id/callButton"
android:weightSum="1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="9dp">
<fragment
android:layout_width="match_parent"
android:layout_height="220dp"
android:name="com.google.android.gms.maps.MapFragment"
android:id="@+id/placeMap"
android:background="@drawable/mapbackground"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_gravity="center_vertical"
android:duplicateParentState="true"
android:layout_margin="2dp"
android:layout_marginBottom="50dp" />
</LinearLayout>
<Button
android:id="@+id/directionsButton"
android:textAllCaps="false"
android:text="Come see us"
android:textColor="#000000"
android:textSize="14sp"
android:paddingLeft="10dp"
android:gravity="center_vertical"
android:drawablePadding="10dp"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/buttonshape1"
android:onClick="directionsClick"
android:singleLine="false"
android:layout_marginTop="9dp"
android:layout_below="@+id/mapLay"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp" />
<Button
android:id="@+id/moreInfoButton"
android:textAllCaps="false"
android:text="More Info"
android:textColor="#000000"
android:textSize="14sp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:drawablePadding="10dp"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/buttonshape2"
android:onClick="directionsClick"
android:singleLine="false"
android:layout_below="@+id/directionsButton"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>
如果您想永久更改颜色,那么您应该删除 View.TouchListener 实施并在按钮点击中执行
callButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callButton.setBackgroundColor(Color.parseColor("#b20000"));
}
});
如果你只想在按下按钮时改变颜色,你应该在 drawable 中进行 (@drawable/buttonshape
)。例如,此元素在按下时会将颜色更改为蓝色。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape><solid android:color="@color/blue" /></shape>
</item>
<item>
<shape><solid android:color="@color/white"/></shape>
</item>
</selector>
您不应该为此实现 onTouchListener。
在您的可绘制对象中创建此 selector_button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--button color pressed -->
<item android:drawable="@android:color/black" android:state_pressed="true"></item>
<!--button color normal -->
<item android:drawable="@android:color/transparent"></item></selector>
你的按钮布局:
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_button"
android:text="abc"
/>