Расширение представления и добавление атрибутов xml из Android

Я разрабатываю кнопку Android, которая будет поддерживать как изображение, так и текст. Этого можно добиться с помощью кнопки и составного рисунка, но у этого есть проблемы с масштабированием.

Я хочу, чтобы виджет можно было объявить в 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?


person Javier Enríquez    schedule 08.07.2013    source источник


Ответы (1)


Я не уверен, что вы пытаетесь сделать, но в приведенном здесь коде вы всегда запускаете цикл for с нуля, поэтому всегда будете входить в «случай 0», никогда не будете входить в случай 1.

person l2mt    schedule 08.07.2013
comment
Это произойдет, если ta.getIndexCount() будет больше 1. Что и должно быть, потому что я получаю 2 атрибута из AttributeSet - person Javier Enríquez; 08.07.2013