标签: declare-styleable

宣言式的重点是什么?

假设我正在使用可设置属性创建一些新视图.我这样声明它们(这是文档说的方式:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="TriangleView">
        <attr name="direction">
            <enum name="NE" value="0" />
            <enum name="NW" value="1" />
            <enum name="SW" value="2" />
            <enum name="SE" value="3" />
        </attr>
    </declare-styleable>

    <declare-styleable name="BannerView">
        <attr name="direction">
            <enum name="NE" value="0" />
            <enum name="NW" value="1" />
            <enum name="SW" value="2" />
            <enum name="SE" value="3" />
        </attr>
        <attr name="thickness" format="dimension" />
    </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为所有属性显然都在同一名称空间中,我得到错误Error: Attribute "direction" has already been defined.

所以显然我必须将明显重复的属性移到这样的区域之外<declare-styleable>:

<?xml version="1.0" encoding="utf-8"?>
<resources>


    <attr name="direction">
        <enum name="NE" value="0" />
        <enum name="NW" …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view attr declare-styleable android-resources

8
推荐指数
1
解决办法
4531
查看次数

Android:您如何使用相同的枚举拥有多个属性?

我有一个 attr 定义为带有值列表的枚举:

<attr name="font" format="enum">
    <enum name="AvenirMedium" value="1" />
    <enum name="AvenirBlack" value="2" />
</attr>
Run Code Online (Sandbox Code Playgroud)

我想在同一个 .

例如:

<declare-styleable name="CustomView">
    <attr name="font" />
    <attr name="leftFont" />
    <attr name="rightFont" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

我没有多次定义枚举,而是试图找到一种方法来定义一次枚举,但让 font、leftFont、rightFont 都使用相同的枚举列表。

有谁知道如何做到这一点?

编辑:我很清楚如何全局定义 attr 并在多个声明样式中引用它。这个问题是在多个具有不同名称的属性中使用枚举。

enums android android-custom-view attr declare-styleable

7
推荐指数
1
解决办法
886
查看次数

Android自定义布局属性"引用属性"格式?

我有一个自定义视图(扩展视图组),我已经指定了一些在attrs.xml中定义的自定义属性....

<declare-styleable name="datascope">
    <attr name="colcount" format="integer" />
    <attr name="titleheaderrows" format="integer" />
    <attr name="colheaderrows" format="integer" />
    <attr name="rowlayout" format="reference" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

整数我可以很好,但最后一个 - rowlayout我想用来引用我将按需膨胀的另一个布局文件.但我找不到在主布局文件中表达rowlayout属性的正确方法.我试过了:

lui:rowlayout="@layout/sensorvaluesdata">
Run Code Online (Sandbox Code Playgroud)

但这在运行时失败:

E/AndroidRuntime(22092):引起:java.lang.NumberFormatException:无法将'res/layout/sensorvaluesdata.xml'解析为整数

lui:rowlayout="?layout/sensorvaluesdata"
Run Code Online (Sandbox Code Playgroud)

哪个失败了

E/AndroidRuntime(22341):引起:java.lang.NumberFormatException:无法解析'?2130903043'为整数

这很有意思'因为它似乎已经将资源ID卡在那里,但也坚持?在前面.

我的R.java文件确实有一个明智的行sensorvaluesdata.

public static final class layout {

    public static final int sensorvaluesdata=0x7f030003;

}
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

(我可以将信息硬编码到java源代码中,并且工作正常....

View vx = li.inflate(R.layout.sensorvaluesdata, this, false);
Run Code Online (Sandbox Code Playgroud)

android custom-controls android-layout android-xml declare-styleable

6
推荐指数
1
解决办法
6465
查看次数

TypedArray#getTextArray()期间抛出异常

这是我第一次创建自定义视图,我试图通过XML填充条目 - 以类似于Spinner的方式.我显然在这里做错了,但我在Spinner之后设计了我的方法,所以我没有看到出了什么问题.

为了解释这段代码的意图,我正在创建一个自定义首选项列表.MultiChooserOption是一个允许用户从选项列表中选择多个内容的项目.TextOption简单地定义将在列表中显示的视图,即,是一个标题和一些其他元素,对于TextOption的子类,另一个元素将是文本而不是小部件(复选框等).

以下是应该对我构建它以及我的logcat输出的方式产生任何影响的所有内容的来源.

attrs.xml

<resources>

    <attr name="caption" format="string" />
    <attr name="options" format="reference" />

    <declare-styleable name="TextOption">
        <attr name="caption" />
        <attr name="text" format="string" />
    </declare-styleable>
    <declare-styleable name="MultiChooserOption">
        <attr name="options" />
    </declare-styleable>

</resources>
Run Code Online (Sandbox Code Playgroud)

MultiChooserOption.java

public class MultiChooserOption extends TextOption<CharSequence> {

    public static final String TAG = MultiChooserOption.class.getSimpleName();

    private List<CharSequence> options;
    private MultiChoiceListView<CharSequence> choiceView;

    public MultiChooserOption(Context context) {

        super( context );
    }

    public MultiChooserOption(Context context, AttributeSet attrs) {

        super( context, attrs );
        initOptions( attrs );
    }

    private void initOptions( AttributeSet attrs ) …
Run Code Online (Sandbox Code Playgroud)

java xml arrays android declare-styleable

6
推荐指数
1
解决办法
967
查看次数

样式无法解析

这是我正在使用的代码:

public ASSwitch(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray sharedTypedArray = context.getTheme().obtainStyledAttributes(
            attrs,
            R.styleable.ASSwitch,
            0, 0);

       try {
           onText = sharedTypedArray.getText(R.styleable.ASSwtich_onText, null);

       } finally {
           sharedTypedArray.recycle();
       }
}
Run Code Online (Sandbox Code Playgroud)

这是attrs.xml文件(添加到values文件夹):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ASSwitch">
        <attr name="onText" format="string" />
        <attr name="offText" format="string" />
        <attr name="onState" format="boolean" />
        <attr name="toogleDrawable" format="string" />
        <attr name="frameDrawable" format="string" />
    </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)

这些问题的答案无法解决问题。请不要认为我的问题是重复的。


更新:似乎我导入了错误的R类。它R不是应用程序的类android.R

xml android android-custom-view styleable declare-styleable

5
推荐指数
2
解决办法
3792
查看次数

更改活动主题而不重新创建活动

我有活动。在按钮上单击,我想更改主题,但是到处都发现,该主题只能设置一次,而在setContentView之前也可以设置。重新启动活动不是我的选择。也许使用attrs必须解决此问题。但是我不知道如何使用它。请帮忙!!

提前致谢!!

android android-theme declare-styleable

3
推荐指数
1
解决办法
1840
查看次数

Android:&lt;declare-styleable&gt; 方法属性

如何在属性中接受方法作为值?就像在视图的 onClick 属性中一样:

<Button android:onClick="onClickMethod"/>
Run Code Online (Sandbox Code Playgroud)

如何定义接受方法的自定义属性?

我知道我们<declare-styleable>在资源中使用,但我们如何让它接受方法?

android declare-styleable

3
推荐指数
1
解决办法
1325
查看次数