0

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

4

1 回答 1

0

我不确定您要做什么,但是在此处的代码中,您始终从零开始 for 循环,因此始终会进入“案例 0”,永远不会进入案例 1

于 2013-07-08T03:34:54.763 回答