我在 Eclipse 中的 Android 项目中调用自定义组件时遇到问题。似乎我不明白命名空间声明是如何归属在一起的。我已经在SO检查了其他几个线程,起初似乎是相关的,但我无法解决这些问题:
- android-custom-control-namespace-issue
- 如何传递自定义组件参数在 java 和 XML 中
- android-custom-widget-styles-how-to-put-them-to-to-namespace
我有以下设置(代码是匿名的):
/值/extra_attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="extraComponent">
<attr name="count" format="integer" />
</declare-styleable>
</resources>
/布局/extra_main.xml
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/extra_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/extra_main"
/>
</merge>
/com.site.package.extra/extra.java
package com.site.package.extra;
... misc imports...
public class Extra extends FrameLayout
{
... misc code...
}
/com.site.package/main.java (start-up class)
package com.site.package;
... misc imports...
public class Main extends Activity
{
... misc code...
}
/布局/主.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/main_style"
xmlns:extra="http://schemas.android.com/apk/res/com.site.package" >
<com.site.package.Extra
android:layout_width="wrap_content"
android:layout_height="wrap_content"
extra:count="3">
</com.site.package.Extra>
</RelativeLayout>
我面临的问题是;无论我做什么,我都无法调用我的自定义组件。错误发生在五月布局中,我尝试更改以下项目:
- 命名空间声明
-
xmlns:extra="http://schemas.android.com/apk/res/com.site.package"
-
xmlns:extra="http://schemas.android.com/apk/res/com.site.package.extra"
-
xmlns:extra="http://schemas.android.com/apk/res/extra"
-
- 组件调用
-
<com.site.package.extraComponent />
-
<com.site.package.Extra.extraComponent />
-
<extraComponent />
-
<Extra.extraComponent />
-
<android.view.ext.extraComponent />
-
- 属性
-
extra:count="3"
-
com.site.package.extra:count="3"
-
在这两种情况下,我都无法从智能感知中获得任何帮助,所以我完全迷失了。我真的不明白命名空间在这里是如何工作的,以及我应该如何让代码工作。
编辑:
我忘了包含我的 AndroidManifest.xml 文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.site.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_logo"
android:label="MyApp"
android:name="MyApp" >
<activity
android:label="MyApp"
android:name=".Main" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</manifest>
您的自定义组件位于包com.site.package.extra
中(来自您发布的代码),因此您可以在 xml 布局中将其用于:
<com.site.package.extra.Extra // ... other attributes
或与:
<view class="com.site.package.extra.Extra"
// ... other attributes />
自定义属性的命名空间:
xmlns:extra="http://schemas.android.com/apk/res/com.site.package"
并使用它们:
extra:count="3"