Android自定义视图ClassNotFound

本文关键字:ClassNotFound 视图 自定义 Android | 更新日期: 2023-09-27 18:02:58

我确信这是一个愚蠢的问题,但我只是找不到答案。我正在尝试在Android中创建一个自定义View XML元素(使用Xamarin,所以它在技术上是c#,尽管我认为这在这里并不重要)。我找到了一堆教程,但似乎没有人解释路径到底是从哪里来的。例如,google示例如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>

com.example.customviews. charts是从哪里来的?我找到的所有示例都没有解释如何创建此路径。我发现有人说这是包名,但我的包名看起来一点也不像(也许我在生成文件时做错了什么?):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="AndroidDemo.AndroidDemo" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

现在我在我的布局中有这个:

<AndroidDemo.AndroidDemo.DragRectView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/dragRect" />

导致Android.View.InflateException和java.lang.ClassNotFoundException。

我确信我有路径到DragRectView(我的类)错误;谁能给我一些指导,告诉我如何弄清楚它是什么?

Android自定义视图ClassNotFound

当您在XML布局中使用自定义视图时,您将使用完全限定类名(其中包括包名)。使用自定义View类所在的包名

com.example.customviews。图表是您的定制视图所在的包,所以com.example.customviews. charts .PieChart是包com.example.customviews. charts中的类PieChart。

如果你在com.example.customviews. charts中没有实际的类PieChart,你将得到ClassNotFoundException。

在您的自定义视图类文件中查找这行代码以了解您在哪个包中:

package com.mypackage;

如果没有,你在默认包中,我建议添加它,使工作更容易。

你的类应该是这样的

package com.mypackage;
public class PieChart extends View {
    ...Your Implementation of PieChart goes here...
}