2017-02-07 5 views
1

Я пытаюсь сделать обычай ProgressBar тем, как я раньше делал пользовательские макеты. На этот раз у меня проблемы.Пользовательский ProgressBar в kotlin

я могу достичь желаемого вида с помощью всего этого XML:

<ProgressBar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:indeterminateOnly="false" 
    android:progressDrawable="@drawable/progress_bar" /> 

Конечная цель, однако, будет делать некоторые настройки в пользовательском классе, так что XML стягивается к этому:

<se.my.viktklubb.app.progressbar.HorizontalProgressBar 
    android:id="@+id/planProgressBar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Вот пользовательский класс:

class HorizontalProgressBar : ProgressBar { 

    constructor(context: Context) : super(context) { 
     initialSetup() 
    } 

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { 
     initialSetup() 
    } 

    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { 
     initialSetup() 
    } 

    fun initialSetup() { 
     max = 100 
     isIndeterminate = false 
     progressDrawable = context.getDrawable(R.drawable.progress_bar) 
    } 
} 

Второй конструктор уволен, но планшет не оформлен. Это на самом деле выглядит как неопределенный прогресс в поворотах, и ни одна из этих установок не применяется в конечном итоге - кажется, что они позже переопределяются чем-то другим.

Что здесь не так?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это очень простой пример. Я прекрасно понимаю, что могу пойти на стили или простую реализацию xml, но я просто использую этот простой случай только для демонстрации проблемы.

ответ

0

Согласно пули 5 этого article, возможно, потребуется изменить initialSetup:

fun initialSetup() { 
    max = 100 
    isIndeterminate = false 
    progressDrawable = context.getDrawable(R.drawable.progress_bar) 
    invalidate() 
    requestLayout() 
} 

Если ничего не изменится, попробуйте позвонить initialSetup позже, onResume активности/фрагмента, например. Если эта работа, проблема, возможно, связана со сложностью инициализации/жизненного цикла компонентов Android.

Смежные вопросы