我对Android很陌生,有一个我想实现的目标,但目前我找不到合适的解决方案。
我正在使用 Android 进行开发,我需要一个 Activity 来显示带有圆角的 2D 矩形的二维网格。网格的大小在运行时确定并从父 Activity 转发。这意味着我还必须在运行时创建矩形。由于矩形还需要自定义行为,我尝试了以下操作:
我确实编写了自己的类并且确实从 View 继承。在onDraw()
方法中,我定义了矩形的外观,尽管一开始我想在 ShapeDrawable XML 文件中定义外观并将其加载到我的自定义矩形的构造中。那效果不好。现在我被卡住了,因为当我尝试将我的视图添加到与活动关联的布局以显示网格时,我得到了错误。当我直接设置其中一个矩形时,setContentView(rectangle)
它会显示在屏幕中间的某个位置。
所以我的问题是:
通过从 View 继承来创建这些矩形是否正确?(请记住,当用户单击矩形时,我必须修改绘制方式,并且我想稍后在单击矩形时打开菜单)
显示这些矩形的最佳方式是什么?当我想以类似网格的方式显示它们时应该使用哪种布局?用户稍后也应该能够删除一些矩形。因此,网格中必须有可能存在间隙。
由于使用此代码将矩形添加到布局中不起作用,我应该怎么做(我使用了 LinearLayout)?
ViewGroup layout = (ViewGroup) findViewById(R.id.conf_new_solar_plant_layout); SolarPanelView spView = new SolarPanelView(this); spView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); layout.addView(spView)
我收到的错误如下:
11-06 11:41:49.862: E/AndroidRuntime(2203): FATAL EXCEPTION: main
11-06 11:41:49.862: E/AndroidRuntime(2203): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.smartexergy.app/com.smartexergy.app.ConfNewSolarPlantActivity}: java.lang.NullPointerException
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.access$600(ActivityThread.java:139)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.os.Looper.loop(Looper.java:154)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.main(ActivityThread.java:4944)
11-06 11:41:49.862: E/AndroidRuntime(2203): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 11:41:49.862: E/AndroidRuntime(2203): at java.lang.reflect.Method.invoke(Method.java:511)
11-06 11:41:49.862: E/AndroidRuntime(2203): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-06 11:41:49.862: E/AndroidRuntime(2203): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-06 11:41:49.862: E/AndroidRuntime(2203): at dalvik.system.NativeStart.main(Native Method)
11-06 11:41:49.862: E/AndroidRuntime(2203): Caused by: java.lang.NullPointerException
11-06 11:41:49.862: E/AndroidRuntime(2203): at com.smartexergy.app.ConfNewSolarPlantActivity.onCreate(ConfNewSolarPlantActivity.java:34)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.Activity.performCreate(Activity.java:4531)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
11-06 11:41:49.862: E/AndroidRuntime(2203): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
谢谢!
编辑:修复了错误,我忘记将布局设置为 contentView。其余的问题仍然存在。