我正在开发一个同时支持图像和文本的 Android 按钮。这可以通过 Button 和复合可绘制对象来实现,但这存在缩放问题。
我希望小部件可以在 xml 中声明,类似这样
<ImageTextButton
android:layout_width="wrap_content"
android:layout_height="50dp"
android:src="@drawable/my_drawable"
android:text="@string/my_text"
android:textSize="12sp" />
这里的问题是:我已经绘制了按钮并且它可以正确缩放。我的意思是我知道如何获得android:src
它似乎工作正常。但是当我尝试获取 textSize 时,出现了问题。
我读了这样的属性:
int attrsArray[] = { android.R.attr.src, android.R.attr.textSize };
TypedArray ta = getContext().obtainStyledAttributes(attrs, attrsArray);
for (int i = 0; i < ta.getIndexCount(); i++) {
switch (i) {
case 0:
int srcId = ta.getResourceId(i, 0);
srcBitmap = BitmapFactory.decodeResource(getResources(), srcId);
break;
case 1:
float textSize = ta.getDimension(i, 0);
if (textSize > 0) {
Log.i("IMAGEBUTTON", "SETTING CUSTOM SIZE");
textPaint.setTextSize(textSize);
}
break;
}
}
但ta.getIndexCount()
它只返回 1,所以开关永远不会进入case 1
我究竟做错了什么?是否有必要将我的自定义视图声明为可样式化?如果是这种情况,我可以在不创建新命名空间的情况下这样做吗?
编辑
我解决了拨打电话的问题super.getTextSize()
。假设我继承自TextView
. 现在我很好,但我想知道为什么我的代码不起作用。如果我不继承TextView
并想添加更多的android属性怎么办?