问题标签 [declare-styleable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7209 浏览

android - 如何在可声明样式中定义整数数组?

我正在为自定义视图实现自己<declare-styleable>的视图(按照此处的说明进行操作)。我希望能够将整数数组指定为可能的 XML 属性之一。我如何:

  1. attrs.xml在?中将整数数组指定为 XML 属性
  2. 调用我的自定义视图后从TypedArray中获取它obtainStyledAttributes()
0 投票
0 回答
1621 浏览

java - 从代码访问 XML 枚举值

我已经声明了一个带有枚举值的可样式属性,如下所示:

现在我想在我的代码中引用那些,最好是在一个switch语句中。

除了将枚举中的值硬编码到我的代码中之外,我找不到任何方法来做到这一点(首先破坏了枚举的一半目的)。

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

编辑

根据@CommonsWare 的回答,尝试了这个:

资源.xml:

attrs.xml:

这导致top不再是rotation.

0 投票
1 回答
683 浏览

android - 可声明样式的名称如何链接到使用其属性的视图?

通常,自定义属性的示例采用以下形式:

及其用法:

因此自定义视图与可样式化属性具有相同的名称。

但是在这个例子中(点击查看完整代码)你会看到:

使用者:

这让我想知道,它是如何ColorOptionsView与 name 定义的属性相关联的Options

0 投票
1 回答
19878 浏览

android - 获取 styled 属性中使用的可绘制引用的资源 id

有了这个自定义视图MyView,我定义了一些自定义属性:

并在布局 XML 中按如下方式分配它们:

起初我以为我可以backgroundBase使用以下方法检索自定义属性:

仅当未分配属性并R.drawable.blank返回默认值时才有效。
app:backgroundBase被赋值时抛出异常“无法转换为整数类型=0xn”,因为即使自定义属性格式将其声明为整数,它确实引用了 aDrawable并且应按如下方式检索:

这有效。
现在我的问题是:
我真的不想Drawable从 TypedArray 中获取,我想要对应的整数 id app:backgroundBase(在上面的示例中它是 R.drawable.logo1)。我怎么才能得到它?

0 投票
0 回答
195 浏览

android - 从 XML 在自定义视图上设置静态字段

这是自定义视图

此 XML 多次实例化 MyView

我想知道color从 XML 初始化静态的正确方法是什么。
我已经知道一种解决方案(但我想知道是否有不同的推荐方式):

  • 定义自定义属性
  • 在任何实例化上使用自定义属性MyView
  • 在 MyView 构造函数期间设置静态字段

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0);
int c = a.getInteger(R.styleable.MyView_color, -1);
如果( c != -1 ) 颜色 = c;

我唯一不喜欢这个解决方案的是它依赖于MyView实例化,通常在代码中,静态字段和方法可以独立访问,所以我想知道是否有一种方法可以设置静态字段也独立于MyView实际实例化。

0 投票
2 回答
4229 浏览

android - Styleable cannot be resolved

Here is the code I am using:

Here is the attrs.xml file (added to values folder):

The answers in these questions couldn't fix the problem. Please don't consider my question as duplicate.


Update: It seems that I was importing the wrong R class. It shall be the application's R class not android.R.

0 投票
4 回答
10324 浏览

java - How to declare several stylable attributes with the same name for different tags?

I want both my ViewA and ViewB to have the "title" tag. But I can't put this in attrs.xml:

because of the error Attribute "title" has already been defined. Another question shows this solution:

but in that case, R.styleable.ViewA_title and R.styleable.ViewB_title are not generated. I need them for reading the attributes from the AttributeSet using the following code:

How can I solve this?

0 投票
1 回答
1251 浏览

java - TypedArray#getTextArray() 期间抛出异常

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

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

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

attrs.xml

MultiChooserOption.java

文本选项.java

options_fragment.xml

数组.xml

字符串.xml

OptionsFragment.java

日志输出

因此,当CharSequence[] optionsArray = attributesArray.getTextArray( R.styleable.MultiChooserOption_options );MultiChooserOption 中的行执行时,会引发异常并且整个 shebang 会崩溃。据我所知,我尽可能多地关注 Spinner。

请帮助我了解我在这里做错了什么。

0 投票
0 回答
165 浏览

android - android 4.4 的自定义样式不可用

所以我对 android 4.4 中的自定义样式有疑问。

如果有人知道 android 4.4 中的问题或额外内容导致自定义样式无法启动,请提供帮助。

这是我使用的代码,它在 android 2.2 到 4.3 上完美运行(用手机和模拟器测试)。

布局 :

班级:

0 投票
2 回答
1233 浏览

java - 从值中获取样式化的枚举名称

这不是关于枚举被问了一百万次的问题。

我将枚举定义为 styleable 属性的一部分(用于自定义小部件)

然后我像这样使用它:

在首选项构造函数中,我想获得名称“RGB”。

但这不起作用,a.getString(...)返回"1"“RGB”的值,我得到一个抛出的异常 ,因为:mColorModenull

代替

注意:我想强调 ColorMode 不是enum导致问题的原因,我需要从中获取名称的枚举是问题顶部的枚举,以 XML 声明。是的,它们具有相同的名称,但我不能依赖它们具有相同的数值。