谷歌地图 Android 的自定义信息窗口

use*_*957 1 android google-maps infowindow google-maps-markers android-button

我想要点击custom info window时出现marker

我希望它是这样的:

ImageView

TextView

TextView

TextView

Button  Button
Run Code Online (Sandbox Code Playgroud)

我看到了其他人对此的帖子问题,但仍然令人困惑。

Kur*_*s92 5

关于ImageView和TextView,试试这个:

\n\n

设置信息窗口布局:infowindowlayout.xml

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\nandroid:layout_width="wrap_content"\nandroid:layout_height="wrap_content"\nandroid:orientation="vertical"\nandroid:background="#FFFFFF" >\n\n<ImageView\n    android:id="@+id/imageView1"\n    android:layout_width="wrap_content"\n    android:layout_height="wrap_content" />\n\n<TextView\n    android:id="@+id/textView1"\n    android:layout_width="wrap_content"\n    android:layout_height="wrap_content"\n    android:text="TextView" />\n\n<TextView\n    android:id="@+id/textView2"\n    android:layout_width="wrap_content"\n    android:layout_height="wrap_content"\n    android:text="TextView" />\n\n</LinearLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n

在您的MapActivity中(这是一个标记的示例,但您也可以将其用于其他标记):

\n\n
public class MapActivity extends Activity  {\nprivate GoogleMap mMap;\nprivate Marker Somewhere;\nprivate int markerclicked;\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.activity_map);\n...\n...\nfinal LatLng somewhere = new LatLng(..., ...);\n\nSomewhere=mMap.addMarker(new MarkerOptions()\n.position(somewhere)\n.title("YOUR TITLE")\n.snippet("INFO")\n.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));\n\n...\n...\n...\n\nmMap.setInfoWindowAdapter(new InfoWindowAdapter() {\n\n        // Use default InfoWindow frame\n        @Override\n        public View getInfoWindow(Marker arg0) {\n            return null;\n        }\n\n        // Defines the contents of the InfoWindow\n        @Override\n        public View getInfoContents(Marker arg0) {\n\n            // Getting view from the layout file infowindowlayout.xml\n            View v = getLayoutInflater().inflate(R.layout.infowindowlayout, null);\n\n            LatLng latLng = arg0.getPosition();\n\n            ImageView im = (ImageView) v.findViewById(R.id.imageView1);\n            TextView tv1 = (TextView) v.findViewById(R.id.textView1);\n            TextView tv2 = (TextView) v.findViewById(R.id.textView2);\n            String title=arg0.getTitle();\n            String informations=arg0.getSnippet();\n\n            tv1.setText(title);\n            tv2.setText(informations);\n\n            if(onMarkerClick(arg0)==true && markerclicked==1){\n               im.setImageResource(R.drawable.yourdrawable);\n              }\n\n\n            return v;\n\n        }\n    });\n}\n\npublic boolean onMarkerClick(final Marker marker) {\n\nif (marker.equals(Somewhere)) \n  {\n      markerclicked=1;\n      return true;\n  }\nreturn false; \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

关于Buttons、ImageButtons等没有办法。文档

\n\n
\n

正如前面有关信息窗口的部分所述,信息窗口不是实时视图,而是将视图渲染为地图上的图像。因此,您在视图上设置的任何侦听器都将被忽略,并且您无法区分视图各个部分上的单击事件。建议您不要在自定义信息窗口中放置交互式组件 \xe2\x80\x94,例如按钮、复选框或文本输入 \xe2\x80\x94。

\n
\n\n

无论如何,似乎有一个解决方案,请参阅这里的答案。我不知道它是否适用于我的代码,但它似乎适用于按钮和图像按钮。

\n