@iBadCoder

Как добавить padding в drawable?

Использовал draweble для создания таких кнопок:
5e7e5c28e43c4084365180.jpeg

Однако столкнулся с такой неприятностью, эффект 3д кнопки портится из-за того, что текст своего положения не меняет.
spoiler
5e7e5c8fc62aa673270435.jpeg
Можно ли как-то установить padding для текста из draweble?
Чтобы изначально padding bottom был например 5, а при нажатии он становился 0?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@iBadCoder Автор вопроса
Решил проблему следующим образом:
Создал drawable для кнопки и поставил его как background.
Создал класс "Button3D", унаследовал его от AppCompatButton.
Переопределил метод onTouchEvent
init {
        this.setPadding(0,0,0,5) //Изночально padding должен быть
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        when(event?.action){
            MotionEvent.ACTION_DOWN -> this.setPadding(0,0,0,0) //При нажатии убераем padding
            MotionEvent.ACTION_UP -> this.setPadding(0,0,0,5) //Для не нажатой кнопки ставим padding
        }
        return super.onTouchEvent(event)
    }


Класс Button3D

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent

class Button3D: androidx.appcompat.widget.AppCompatButton{

    constructor(context: Context, attrs: AttributeSet): super(context, attrs)

    init {
        this.setPadding(0,0,0,5) //Изночально padding должен быть
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        when(event?.action){
            MotionEvent.ACTION_DOWN -> this.setPadding(0,0,0,0) //При нажатии убераем padding
            MotionEvent.ACTION_UP -> this.setPadding(0,0,0,5) //Для не нажатой кнопки ставим padding
        }
        return super.onTouchEvent(event)
    }
}


Drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false">
        <layer-list>
            <item>
                <shape>
                    <corners android:radius="15dp" />
                    <solid android:color="@color/colorAccentDark"/>
                </shape>
            </item>
            <item android:bottom="5dp" android:gravity="center">
                <shape>
                    <corners android:radius="15dp" />
                    <solid android:color="@color/colorAccent" />
                </shape>
            </item>
        </layer-list>
    </item>

    <item android:top="5dp" android:state_pressed="true">
        <shape>
            <corners android:radius="15dp" />
            <solid android:color="@color/colorAccent"/>
        </shape>
    </item>
    
</selector>


Не нажатая кнопка

5e7f15a0cf4a4484238882.jpeg

Нажатая кнопка

5e7f15ae79aa6234378486.jpeg
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы