更改我的代码段中响应文本的颜色 - 在 android 中选择标记
Change color of response text on my snippet - on selecting the marker in android
我正在 android 使用 google 地图标记,请看下面的图片
我想根据响应更改 Y 和 N 的颜色,比如如果是 Y 我希望颜色应该是绿色,如果是 N 那么颜色应该是红色。
现在 Y 和 N 都是红色的,因为我写了下面的代码:
<TextView
android:id="@+id/response"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/response_lbl"
android:textAllCaps="true"
android:textColor="@color/event_response_s"
android:textSize="18sp" />
其中 event_response_s = 红色。
我尝试通过删除 android:textColor="@color/event_response_s"
xml代码。
if (marker.getSnippet().equals(currentEvent.getButton_one())) {
response.setTextColor(context.getResources().getColor(R.color.green));
}
else response.setTextColor(context.getResources().getColor(R.color.red));
marker.getSnippet() 的值是 Y 或 N,取决于用户将按下的按钮。我想用 currentEvent.getButton_one(); 检查这个,它给出了第一个按钮的值。
这里的问题是我在声明它的其他 class 中获得 currentEvent.getButton_one() 的正确值,但在其他 class 即 CustomInfoWindow 中却没有。最终条件应如下检查:if Y == Y ---> GREEN else RED.
如果您需要更多信息或想知道我还尝试了什么,请告诉我。
在Event.java中:
Intent i = new Intent(getApplicationContext(), MyActivity.class);
i.putExtra("response1", currentEvent.getButton_one());
在MainActivity.java中:
String response_1 = getIntent().getStringExtra("response1");
现在从MyActivity.java开始,我必须在CustomInfoWinidow.java中使用response_1进行比较:
if (marker.getSnippet().equals(response_1)) {
response.setTextColor(context.getResources().getColor(R.color.green));
} else
response.setTextColor(context.getResources().getColor(R.color.red));
}
条件:
if (marker.getSnippet().equals("Y")){
response.setTextColor(context.getResources().getColor(R.color.green));
}
if (marker.getSnippet().equals("N")) {
response.setTextColor(context.getResources().getColor(R.color.red));
}
不对,一定是:
if (marker.getSnippet().equals("Responded Y")){
response.setTextColor(R.color.green);
}
if (marker.getSnippet().equals("Responded N")) {
response.setTextColor(R.color.red));
}
并确保事件仅在单击标记时发生。
希望这对你有帮助
编辑:尝试将 response_1 传入 CustomInfoWindow
的构造函数
public class CustomInfoWindow implements InfoWindowAdapter {
public static final String DEVICE_ACTIVE = "Device Active";
private String response_1; //Add this as a member variable
//.......
public CustomInfoWindow(Context context, String response_1_custom) {
this.response_1 = response_1_custom; //set the value here
this.context = context;
inflater = (LayoutInflater) LayoutInflater.from(context);
}
public View getInfoContents(Marker marker) {
//........
//Now this should work:
try {
if (marker.getSnippet().equals(response_1)) {
response.setTextColor(context.getResources().getColor(R.color.green));
} else response.setTextColor(context.getResources().getColor(R.color.red));
}catch(Exception e){
}
if (marker.getSnippet().equals(DEVICE_ACTIVE)) {
response.setTextColor(context.getResources().getColor(R.color.red));
}
response.setText(marker.getSnippet());
return view;
}
//.....................
然后在MainActivity.java中,在创建CustomInfoWindow
时传入response_1
:
if (user_id.equalsIgnoreCase(userid)) {
map.setInfoWindowAdapter(new CustomInfoWindow(getBaseContext(), response_1)); //added response_1 to constructor parameter
map.moveCamera(CameraUpdateFactory.newLatLngZoom(PERTH, 12));
}
原回答:
我结合使用了 InfoWindowAdapter
和 MarkerClickListener
。
基本上,您需要在InfoWindowAdapter
中设置片段的文本颜色,并在MarkerClickListener
中设置Marker
的颜色
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Log.d("marker", "marker click");
String s = marker.getSnippet();
Log.d("marker", "snippet: " + s);
if (s.equals("Y")){
marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
}
else if (s.equals("N")){
marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}
return false;
}
});
mGoogleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker arg0) {
View v = getLayoutInflater().inflate(R.layout.customlayout, null);
//set other fields.....
//Snippet:
TextView tSnippet = (TextView) v.findViewById(R.id.snippet);
if (arg0.getSnippet().equals("N")){
tSnippet.setTextColor(Color.RED);
}
else if (arg0.getSnippet().equals("Y")){
tSnippet.setTextColor(Color.GREEN);
}
return v;
}
});
结果:
我正在 android 使用 google 地图标记,请看下面的图片
我想根据响应更改 Y 和 N 的颜色,比如如果是 Y 我希望颜色应该是绿色,如果是 N 那么颜色应该是红色。
现在 Y 和 N 都是红色的,因为我写了下面的代码:
<TextView
android:id="@+id/response"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/response_lbl"
android:textAllCaps="true"
android:textColor="@color/event_response_s"
android:textSize="18sp" />
其中 event_response_s = 红色。
我尝试通过删除 android:textColor="@color/event_response_s"
xml代码。
if (marker.getSnippet().equals(currentEvent.getButton_one())) {
response.setTextColor(context.getResources().getColor(R.color.green));
}
else response.setTextColor(context.getResources().getColor(R.color.red));
marker.getSnippet() 的值是 Y 或 N,取决于用户将按下的按钮。我想用 currentEvent.getButton_one(); 检查这个,它给出了第一个按钮的值。 这里的问题是我在声明它的其他 class 中获得 currentEvent.getButton_one() 的正确值,但在其他 class 即 CustomInfoWindow 中却没有。最终条件应如下检查:if Y == Y ---> GREEN else RED.
如果您需要更多信息或想知道我还尝试了什么,请告诉我。
在Event.java中:
Intent i = new Intent(getApplicationContext(), MyActivity.class);
i.putExtra("response1", currentEvent.getButton_one());
在MainActivity.java中:
String response_1 = getIntent().getStringExtra("response1");
现在从MyActivity.java开始,我必须在CustomInfoWinidow.java中使用response_1进行比较:
if (marker.getSnippet().equals(response_1)) {
response.setTextColor(context.getResources().getColor(R.color.green));
} else
response.setTextColor(context.getResources().getColor(R.color.red));
}
条件:
if (marker.getSnippet().equals("Y")){
response.setTextColor(context.getResources().getColor(R.color.green));
}
if (marker.getSnippet().equals("N")) {
response.setTextColor(context.getResources().getColor(R.color.red));
}
不对,一定是:
if (marker.getSnippet().equals("Responded Y")){
response.setTextColor(R.color.green);
}
if (marker.getSnippet().equals("Responded N")) {
response.setTextColor(R.color.red));
}
并确保事件仅在单击标记时发生。 希望这对你有帮助
编辑:尝试将 response_1 传入 CustomInfoWindow
public class CustomInfoWindow implements InfoWindowAdapter {
public static final String DEVICE_ACTIVE = "Device Active";
private String response_1; //Add this as a member variable
//.......
public CustomInfoWindow(Context context, String response_1_custom) {
this.response_1 = response_1_custom; //set the value here
this.context = context;
inflater = (LayoutInflater) LayoutInflater.from(context);
}
public View getInfoContents(Marker marker) {
//........
//Now this should work:
try {
if (marker.getSnippet().equals(response_1)) {
response.setTextColor(context.getResources().getColor(R.color.green));
} else response.setTextColor(context.getResources().getColor(R.color.red));
}catch(Exception e){
}
if (marker.getSnippet().equals(DEVICE_ACTIVE)) {
response.setTextColor(context.getResources().getColor(R.color.red));
}
response.setText(marker.getSnippet());
return view;
}
//.....................
然后在MainActivity.java中,在创建CustomInfoWindow
时传入response_1
:
if (user_id.equalsIgnoreCase(userid)) {
map.setInfoWindowAdapter(new CustomInfoWindow(getBaseContext(), response_1)); //added response_1 to constructor parameter
map.moveCamera(CameraUpdateFactory.newLatLngZoom(PERTH, 12));
}
原回答:
我结合使用了 InfoWindowAdapter
和 MarkerClickListener
。
基本上,您需要在InfoWindowAdapter
中设置片段的文本颜色,并在MarkerClickListener
Marker
的颜色
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Log.d("marker", "marker click");
String s = marker.getSnippet();
Log.d("marker", "snippet: " + s);
if (s.equals("Y")){
marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
}
else if (s.equals("N")){
marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}
return false;
}
});
mGoogleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker arg0) {
View v = getLayoutInflater().inflate(R.layout.customlayout, null);
//set other fields.....
//Snippet:
TextView tSnippet = (TextView) v.findViewById(R.id.snippet);
if (arg0.getSnippet().equals("N")){
tSnippet.setTextColor(Color.RED);
}
else if (arg0.getSnippet().equals("Y")){
tSnippet.setTextColor(Color.GREEN);
}
return v;
}
});
结果: