我最近一直在尝试将 EditText 放置在 InfoWindow 中,以便用户可以单击 InfoWindow 并用他们想要的任何文本注释该字段。我知道 InfoWindows 只是渲染图像而不是实时图像,因此我尝试在 InfoWindow 上实现 OnInfoWindowClickListener 以调出键盘并直接编辑 EditText,但这也失败了。
这里是处理地图和 InfoWindows 的方法的代码。为了便于阅读,我删除了所有不必要的部分:
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
gMap = googleMap;
gMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Nullable
@Override
public View getInfoContents(@NonNull Marker marker) {
View iwv = getLayoutInflater().inflate(R.layout.infowindow, null);
return iwv;
}
@Nullable
@Override
public View getInfoWindow(@NonNull Marker marker) {
return null;
}
});
gMap.setOnMapClickListener(new GoogleMap.OnMapClickListener()
{
@Override
public void onMapClick(@NonNull LatLng point) {
if(flag) { //toggle the ability to turn markers on or off
gMap.addMarker(new MarkerOptions()
.position(point)).showInfoWindow();
}
}
});
gMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(@NonNull Marker marker) {
View v = li.inflate(R.layout.infowindow, null);
infoWindowText = v.findViewById(R.id.iw_et);
handleKeyboard(infoWindowText);
}
});
}
public void handleKeyboard(View view)
{
if (view.requestFocus()) {
InputMethodManager imm = getSystemService(InputMethodManager.class);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
}
}
我还知道 imm.toggleSoftInput 已被贬值,因此问题可能是由它而不是点击侦听器引起的,但是尝试使用 imm.ShowSoftInput 根本无法调出键盘。
我想要做的事情根本不可能,还是我只是使用了错误的点击侦听器? 非常感谢。
gMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(@NonNull Marker marker) {
View v = li.inflate(R.layout.infowindow, null);
infoWindowText = v.findViewById(R.id.iw_et);
handleKeyboard(infoWindowText);
}
});
当用户单击信息窗口时,您:
EditText
,作为膨胀全新 R.layout.infowindow
布局的一部分EditText
但是,屏幕上没有那个
EditText
。您基本上为其创建了 Java 对象,但仅此而已。
对比:
public View getInfoContents(@NonNull Marker marker) {
View iwv = getLayoutInflater().inflate(R.layout.infowindow, null);
return iwv;
}
这是有效的,因为您正在返回膨胀的布局,并且调用代码对其执行一些有用的操作(在本例中,将该布局渲染为位图)。然而,即使在这种情况下,
EditText
本身也不会出现在屏幕上,而只是它的图像。
我想做的事情根本不可能
如果您有数百个小时可以度过,您可以:
最初执行此操作可能只需要数十个小时,但您不是 Google 地图的开发人员。用户设备上不仅会出现许多版本的 Google 地图,而且这些版本还会随着时间的推移而发生变化。您可能需要针对不同版本的 Google 地图定制此逻辑,以使其在当前和未来都能正常工作。您还需要考虑不同的硬件、不同的软键盘等。
就我个人而言,如果我的图形设计师要求此功能,我会用鳟鱼打他们,然后协商一些风险较小的事情(例如,点击信息窗口显示底部工作表,用户可以在其中进行数据输入)。