2013-07-08 2 views
0

Я разрабатываю Android-кнопку, которая будет поддерживать как изображение, так и текст. Это может быть достигнуто с помощью кнопки и составной схемы, но это имеет проблемы с масштабированием.Расширение Просмотр и добавление атрибутов xml с 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

Что я делаю неправильно? Нужно ли объявлять мое пользовательское представление как стиль? Если это так, могу ли я сделать это без создания нового пространства имен?

EDIT

я решил мою проблему сделать вызов super.getTextSize(). Это работает, если я наследую от TextView. На данный момент я хороший, но я хочу знать, почему мой код не работает. Что делать, если я не наследую от TextView и хочу добавить больше андроидных атрибутов?

ответ

0

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

+0

It будет, если 'ta.getIndexCount()' результат будет больше 1. Которое предполагается, потому что я получаю 2 атрибута из AttributeSet –