es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Android. La fuente personalizada no funciona al establecer desde el estilo.

Estoy intentando establecer programáticamente el estilo para mi botón. Aquí está mi estilo:

<style name="MainButton">
    <item name="android:background">@drawable/bg_button</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">70dp</item>
    <item name="android:padding">10dp</item>      
    <item name="android:textColor">@color/red</item>
    <item name="android:textSize">30sp</item>
    <item name="fontPath">fonts/Semibold.ttf</item>    
</style>

Y luego, en un fragmento, intento hacer lo siguiente:

val button = Button(ContextThemeWrapper(context, R.style.MainButton), null, R.style.MainButton).apply {
    this.text = text
}
llView.addView(button)

El botón se agrega, pero algunos de los ajustes especificados en el estilo no se aplican a él. Por ejemplo, la altura del botón funciona como wrap_content, pero se esperaban 70dp, no se aplica ninguna fuente. Sin embargo, si uso este estilo en .xml todo funciona bien. Por favor, ayúdeme.

PD: Necesito agregar botones dinámicamente a grupos de vistas. ¿Quizás es mejor crear un botón en .xml con un estilo personalizado e inflarlo dentro de mi código? Necesito agregar botones dinámicamente en diferentes pantallas, así que decidí que sería mejor mover la lógica de creación de botones a una clase separada, tal vez debería ser reemplazada con inflate, por favor ayúdeme.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema radica en cómo se aplica el estilo programáticamente al botón. En lugar de utilizar el constructor con el ID de recurso del estilo, intente utilizar el constructor solo con el contexto y luego establecer el estilo mediante el método button.setStyle ().

    Aquí hay un ejemplo de cómo puede establecer el estilo programáticamente:

    val button = Button(context)
    button.apply {
        text = "Botón de texto"
        setStyle(R.style.MainButton)
    }
    llView.addView(button)
    

    También considere crear una subclase personalizada de Button que encapsulará la lógica para crear botones con un estilo específico. Luego puede inflar este botón personalizado en sus diseños XML o agregarlo programáticamente a grupos de vistas. Esto facilitará el mantenimiento y reutilización del código para crear botones con el estilo deseado.

Comments are closed.