我正在开发一个同时支持图像和文本的 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属性怎么办?