我有一张带有自定义图块的地图,我需要在网站上添加一个可选的图例,解释自定义地图的颜色代码。
我现在尝试通过触发通过菜单显示图像的 toast 来实现我想要的。但现在我了解到 toast 最多只能显示 3.5 秒,但我需要一些东西一直覆盖在地图上,直到它被点击。因此也不会随着背景中的地图移动而消失。
编辑:这是我尝试使用弹出窗口。但是,一旦我单击菜单,应用程序“不幸地停止了”。
这是我的菜单:
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
//..
case R.id.legenda:
showLegenda();
return true;
default:
return super.onOptionsItemSelected(item);
}
这就是我的弹出窗口现在的样子。
private void showLegenda() {
// TODO Add popup here
/* LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.toastlegenda,
(ViewGroup) findViewById(R.id.relativeLayout1));
Toast toast = new Toast(this);
toast.setView(view);
toast.show();*/
LayoutInflater inflater = (LayoutInflater)
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PopupWindow pw = new PopupWindow(
inflater.inflate(R.layout.toastlegenda, null, false),
100,
100,
true);
// The following line raises the error:
pw.showAtLocation(this.findViewById(R.id.mapview), Gravity.CENTER, 0, 0);
}
这是我的 R.id.mapview 来自的 map_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.osmdroid.views.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
mapview 不能作为弹出窗口的根容器吗?地图视图是选项卡视图的一部分。如果有人能给我一个提示是什么引发了这里的错误,那就太好了。
这是 toastlegenda.xml (源于早期尝试用 toast 制定议程)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout1"
android:background="@android:color/transparent">
<TextView
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textView1" android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Test"
android:gravity="center"
android:textColor="@android:color/black">
</TextView>
<ImageView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:src="@drawable/dcmr_legenda_bl"
android:layout_below="@+id/textView1"
android:layout_margin="5dip"
android:id="@+id/imageView1">
</ImageView>
<TextView
android:id="@+id/textView2"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Test 1,2, 1,2..."
android:gravity="center"
android:layout_below="@+id/imageView1"
android:textColor="@android:color/black">
</TextView>
</RelativeLayout>
和整个错误:
E/AndroidRuntime(15404): FATAL EXCEPTION: main
E/AndroidRuntime(15404): java.lang.NullPointerException
E/AndroidRuntime(15404): at android.widget.PopupWindow.showAtLocation(PopupWindow.java:809)
E/AndroidRuntime(15404): at nl.sense.demo.MapActivity.showLegenda(MapActivity.java:156)
E/AndroidRuntime(15404): at nl.sense.demo.MapActivity.onOptionsItemSelected(MapActivity.java:122)
E/AndroidRuntime(15404): at android.app.Activity.onMenuItemSelected(Activity.java:2502)
E/AndroidRuntime(15404): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:969)
E/AndroidRuntime(15404): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
E/AndroidRuntime(15404): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
E/AndroidRuntime(15404): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
E/AndroidRuntime(15404): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:468)
E/AndroidRuntime(15404): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:126)
E/AndroidRuntime(15404): at android.view.View$PerformClick.run(View.java:14263)
E/AndroidRuntime(15404): at android.os.Handler.handleCallback(Handler.java:605)
E/AndroidRuntime(15404): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(15404): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(15404): at android.app.ActivityThread.main(ActivityThread.java:4441)
E/AndroidRuntime(15404): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(15404): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(15404): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(15404): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(15404): at dalvik.system.NativeStart.main(Native Method)