自定义组件命名空间调用

时间:2012-08-10 09:53:01

标签: java android namespaces custom-component

我在Eclipse中的Android项目中调用自定义组件时遇到问题。似乎我不明白命名空间声明如何属于一起。我在这里检查了几个其他线程,起初似乎是相关的,但我无法解决我的问题:

我有以下设置(代码是匿名的):

/values/extra_attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="extraComponent">
        <attr name="count" format="integer" />
    </declare-styleable>
</resources>

/layout/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 (启动课程)

package com.site.package;

... misc imports...

public class Main extends Activity
{
... misc code...
}

/layout/main.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>

我面临的问题是;无论我做什么,我都无法调用我的自定义组件。错误发生在may布局中,我试图更改以下项目:

  1. 名称空间声明
    • 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"
  2. 组件调用
    • <com.site.package.extraComponent />
    • <com.site.package.Extra.extraComponent />
    • <extraComponent />
    • <Extra.extraComponent />
    • <android.view.ext.extraComponent />
  3. 属性
    • extra:count="3"
    • com.site.package.extra:count="3"
  4. 在任何一种情况下,我都无法从intellisense获得任何帮助,所以我完全迷失了。我真的不明白名称空间在这里是如何工作的以及我应该如何使代码工作。

    编辑:

    我忘了包含 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>
    

1 个答案:

答案 0 :(得分:1)

您的自定义组件位于包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"