1

我在库应用程序中创建了一个自定义复合视图,一切正常。当我添加自定义属性来查看时,我总是得到默认值。我遵循这个步骤只有一个区别:我的视图是在一个库项目中。

/res/values/attrs.xml

<resources>
    <declare-styleable name="DatePickerView">
        <attr name="showToday" format="boolean" />
        <attr name="calendar" format="enum">
            <enum name="jalali" value="0" />
            <enum name="gregorian" value="1" />
        </attr>
    </declare-styleable>
</resources>

包含视图的布局文件:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:farayan="http://schemas.android.com/apk/lib/net.farayan.android.view"
...
    <net.farayan.android.view.datepicker.DatePickerView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        farayan:showToday="false"
        farayan:calendar="gregorian"/>
...

组件代码:

int calendar;
boolean showToday;

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DatePickerView, 0, 0);
try {
    calendar = a.getInteger(R.styleable.DatePickerView_calendar, 0);
    showToday = a.getBoolean(R.styleable.DatePickerView_showToday, true);
} finally {
    a.recycle();
}

calendar并且showToday总是0true分别。任何的想法?

4

2 回答 2

0

看起来有些不对劲:

    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:farayan="http://schemas.android.com/apk/lib/net.farayan.android.view"

怎么改成:

        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:farayan="http://schemas.android.com/apk/res/net.farayan.android.view"

net.farayan.android.view是您的应用根命名空间。

更新1

xmlns:farayan="http://schemas.android.com/apk/res/your_main_app_package"

是一个例子。它使用库项目中定义的视图。

于 2013-07-21T09:51:37.920 回答
0

如果我们在项目中添加新的复合视图代码及其属性,我们应该在布局的开头添加:

xmlns:custom="http://schemas.android.com/apk/res/your_main_app_package

如果新的复合视图在链接到我们的项目的库项目中,我们应该添加:

xmlns:custom="http://schemas.android.com/apk/res-auto

链接:https ://stackoverflow.com/a/10217752/1152549

于 2014-03-11T07:40:33.660 回答