我创建了一个新的自定义视图,用于替换linearLayout的权重机制。我添加了一些样式属性,可以在布局xml文件中直接使用。
attrs.xml文件包含:
<resources>
<declare-styleable name="WeightedLayout_LayoutParams">
<attr name="horizontalWeights" format="string" />
<attr name="verticalWeights" format="string" />
</declare-styleable>
</resources>
可以看到示例和完整代码here。我面临的问题是,在可视化编辑器中,我一直得到一个空指针异常,我从typedArray中获取字符串:
final TypedArray arr=context.obtainStyledAttributes(attrs,R.styleable.WeightedLayout_LayoutParams);
//...
final String horizontalWeights=arr.getString(R.styleable.WeightedLayout_LayoutParams_horizontalWeights);
奇怪的是,如果我运行应用程序,它运行正常(除了我在原始线程中报告的奇怪错误)。我试图修改code of RomainGuy that has made a flowLayout,我也注意到同样的行为也出现了。
任何人都可以告诉我应该怎么做?怎么会不起作用?
答案 0 :(得分:2)
最后我找到了答案,通过查看Android代码:
为了获取文本,您需要查看所有属性并使用getText,例如:
final TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.WeightedLayout_LayoutParams);
int indexCount=a.getIndexCount();
for(int i=0;i<indexCount;++i)
{
final int attr=a.getIndex(i);
if(attr==R.styleable.WeightedLayout_LayoutParams_horizontalWeights)
_textToShow=a.getText(attr);
}
a.recycle();
答案 1 :(得分:1)
你应该在赋值之前检查 TypedArray.hasValue() :
final TypedArray arr = context.obtainStyledAttributes(attrs,R.styleable.WeightedLayout_LayoutParams);
//...
if (arr.hasValue(R.styleable.WeightedLayout_LayoutParams_horizontalWeights)) {
final String horizontalWeights = arr.getString(R.styleable.WeightedLayout_LayoutParams_horizontalWeights);
}