Android CustomAttribute в MotionLayout для изменения текста в TextView

Кто-нибудь может помочь мне найти правильный способ изменить текст TextView в _2 _... Это то, что я делаю.

Я тестирую MotionLayout в простом приложении ... Я дохожу до части на Учебники по движению о CustomAttributes

С их помощью вы можете изменить BackgroundColor для View, а также textColor, используя customColorValue

В этом случае вы можете видеть, что это очень хорошо работает, изменяя эти значения в начальной и конечной сценах:

        <CustomAttribute
            motion:attributeName="backgroundColor"
            motion:customColorValue="#004A6D" />

        <CustomAttribute
            motion:attributeName="textColor"
            motion:customColorValue="#000000" />

введите описание изображения здесь

Также я отмечаю, что есть customStringValue, поэтому я думаю, что могу изменить текст TextView на «ДО» -> «ПОСЛЕ». Но когда я пытаюсь установить это с помощью CustomAttribute, приложение вылетает.

В стартовой сцене:

<CustomAttribute
            motion:attributeName="Text"
            motion:customStringValue="BEFORE" />

И в финальной сцене:

        <CustomAttribute
            motion:attributeName="Text"
            motion:customStringValue="AFTER" />

Вне MotionScene текст textView - ТЕСТ:

  • Когда я устанавливаю CustomAttribute только для конечной сцены ... текст меняется с начального значения ТЕСТ до конечного значения ПОСЛЕ ... поэтому он частично работает, но никогда не возвращается к исходное состояние.
  • Это случается также, когда на TextView не установлен исходный текст. Работает частично.

введите описание изображения здесь

Итак ... любой может помочь мне найти правильный способ изменить текст TextView в MotionLayout.


person Oscar Méndez    schedule 10.11.2018    source источник
comment
Оскар, ты нашел какое-нибудь решение для этого? У меня такая же проблема :(   -  person Azizjon Kholmatov    schedule 22.04.2020
comment
Если нет, то сообщали ли вы об этой проблеме в Google?   -  person Azizjon Kholmatov    schedule 22.04.2020


Ответы (3)


вы можете сделать это программно, используя TransitionListener следующим образом:

motionLayout.setTransitionListener(object : MotionLayout.TransitionListener {
    override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) {
        // ADD YOUR CODE HERE
    }

    override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
        // ADD YOUR CODE HERE
    }

    override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {
        textView.text = if(p3==0f) "before" else "after"
    }

    override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {

    }
})
person SwaiX    schedule 14.02.2019
comment
Это сработало для меня. Я думаю, что нам нужно использовать этот обходной путь, пока Google не выпустит исправление для этой ошибки. - person Azizjon Kholmatov; 22.04.2020

Я тестирую и нравится это

введите описание изображения здесь

//constraintSetStart
<ConstraintSet...>
<Constraint
  android:id="@+id/button">
    <CustomAttribute
       motion:attributeName="Text"
       motion:customStringValue="CLOSE"/>
</Constraint>
</ConstraintSet>

//constraintSetEnd
<ConstrainSet..>
<Constraint
   android:id="@+id/button">
     <CustomAttribute
       motion:attributeName="Text"
       motion:customStringValue="OPEN"/>
 </Constraint>
</ConstraintSet>
person Andi Tenroaji Ahmad    schedule 26.02.2019

Простой способ сделать это

 <ConstraintSet android:id="@+id/start">
    <Constraint
        android:id="@id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
      >

        <CustomAttribute
            app:attributeName="textColor"
            app:customColorValue="#1D1D1D" />
    </Constraint>
</ConstraintSet>

    <Constraint
        android:id="@id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <CustomAttribute
            app:attributeName="textColor"
            app:customColorValue="#FFFFFF" />
    </Constraint>
</ConstraintSet>

Change motion to app

person Amirhossein Rashidi    schedule 22.02.2020
comment
При изменении constraintlayout:2.0.0-beta6 с motion на app действительно работает. Я даже не ... ????????‍♂️ - person Ivan Morgillo; 08.06.2020