更改我的代码段上的响应文本的颜色 - 在android中选择标记

时间:2015-04-17 19:13:11

标签: android google-maps google-maps-markers

我正在使用谷歌地图标记处理android,请查看下面的图片

Green marker shows user has responded yes i.e. Y as showen

我想改变Y&的颜色N根据响应,如果它是Y我想要的颜色应该是GREEN&如果是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 = RED。

我尝试删除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();来检查它,它给出了第一个按钮的值。 这里的问题是我在其他类中声明了currentEvent.getButton_one()的正确值,但在其他类中却没有,即CustomInfoWindow。最终条件应该像这样检查:如果Y == Y ---&gt;绿色其他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));
}

2 个答案:

答案 0 :(得分:2)

编辑:尝试将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中,在创建response_1时传递CustomInfoWindow

if (user_id.equalsIgnoreCase(userid)) { 
  map.setInfoWindowAdapter(new CustomInfoWindow(getBaseContext(), response_1)); //added response_1 to constructor parameter
  map.moveCamera(CameraUpdateFactory.newLatLngZoom(PERTH, 12)); 
} 

原始答案:

我使用InfoWindowAdapterMarkerClickListener的组合使其工作。

基本上,您需要在InfoWindowAdapter中设置代码段的文字颜色,并在Marker

中设置MarkerClickListener的颜色
      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;

            }
        });

结果:

Y

N

答案 1 :(得分:0)

条件:

    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));
        }

并确保仅在单击标记时才会发生该事件。 希望这会对你有所帮助