Android自定义视图ClassNotFound

时间:2015-07-16 14:55:34

标签: java c# android xml xamarin

我确定这是一个愚蠢的问题,但我无法在任何地方找到答案。我正在尝试在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.charting来自哪里?我发现的所有例子都没有解释如何创建这条路径。我发现有人说这是包名,但我的包名看起来不像那样(也许我在生成文件时做错了什么?):

<?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(我的类)路径错了;任何人都可以就如何弄清楚它是什么给我一些方向吗?

2 个答案:

答案 0 :(得分:4)

com.example.customviews.charting是您的自定义视图所在的包,因此com.example.customviews.charting.PieChart是com.example.customviews.charting包中的类PieChart。

如果在com.example.customviews.charting中实际上没有类PieChart,则会得到ClassNotFoundException。

在自定义视图类文件中查找此行代码,以了解您所在的包:

package com.mypackage;

如果它不在那里你就在默认包中,我会建议添加它以使生活更轻松。

你的课应该是这样的

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

答案 1 :(得分:4)

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