texto studio redondo imagen diseño con cambiar botones boton animados ajustar android button text fonts

studio - imagebutton android cambiar imagen



¿Cómo establecer una fuente particular para un texto de botón en Android? (7)

1) Obtenga la fuente que necesita como archivo .ttf (CopperplateGothicLight.ttf, por ejemplo) y colóquela en el directorio / assets / de su proyecto

2) Use este código para hacer referencia a la fuente y configurarlo para su botón:

Typeface copperplateGothicLight = Typeface.createFromAsset(getAppContext().getAssets(), "CopperplateGothicLight.ttf"); yourButton.setTypeface(copperplateGothicLight);

Quiero que el texto de mi botón esté en la fuente Copperplate Gothic Light y todavía no he encontrado un código de limpieza simple para una función tan simple como esta. ¡Ayuda!

PD: dado que Android viene con ariel y algunas otras fuentes, necesitamos importar (disculpas por la falta de una mejor palabra ya que soy nuevo en esto) la fuente que queremos usar. Esto es todo lo que he podido reunir hasta ahora y aquí es donde el camino termina para mí.


Después de varias investigaciones, mi mejor opción fue:

public class CustomButton extends Button { Typeface normalTypeface = FontCache.get("fonts/CopperplateGothicLight.ttf", getContext()); Typeface boldTypeface = FontCache.get("fonts/CopperplateGothicBold.ttf", getContext()); /** * @param context */ public CustomButton(Context context) { super(context); } /** * @param context * @param attrs */ public CustomButton(Context context, AttributeSet attrs) { super(context, attrs); } /** * @param context * @param attrs * @param defStyleAttr */ public CustomButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } }

luego Usar fontCache desde la primera respuesta sobre esto: Fugas de memoria con fuente personalizada para establecer una fuente personalizada

public class FontCache { private static Hashtable<String, Typeface> fontCache = new Hashtable<String, Typeface>(); public static Typeface get(String name, Context context) { Typeface tf = fontCache.get(name); if(tf == null) { try { tf = Typeface.createFromAsset(context.getAssets(), name); } catch (Exception e) { return null; } fontCache.put(name, tf); } return tf; } }

¡Menos código y más uso de los estándares de Android!


MainActivity.java

package com.mehuljoisar.customfontdemo; import android.app.Activity; import android.graphics.Typeface; import android.os.Bundle; import android.view.Menu; import android.widget.Button; public class MainActivity extends Activity { private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button)findViewById(R.id.button1); button1.setTypeface(Typeface.createFromAsset(getAssets(), "copperplate-gothic-light.ttf")); button1.setText("hello"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="24dp" android:text="Button" />

Enlace de descarga para la fuente deseada: copperplate_gothic_light

ponlo dentro de tu carpeta de activos.

Captura de pantalla:

Espero que sea util !!


Primero descargue el archivo TTF para el estilo de fuente y luego colóquelo en la carpeta de assets de su proyecto.

Puede configurarlo programáticamente de la siguiente manera:

Typeface font_style = Typeface.createFromAsset(getAssets(), "yourcystomfontstyle.ttf"); yourbutton.setTypeface(font_style);


Prueba esto. También es útil para EditTextViews, TextViews ... ¡lo que sea!

<your.namespace.app.FontButton app:font="montserrat" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

¿Quién es posible? ¡Por esta manera!

public class FontButton extends Button { public FontEditText(Context context) { this( context, null ); } public FontEditText(Context context, AttributeSet attrs) { this( context, attrs, 0 ); init( context, attrs ); } public FontEditText(Context context, AttributeSet attrs, int defStyle) { super( context, attrs, defStyle ); init( context, attrs ); } public FontEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super( context, attrs, defStyleAttr, defStyleRes ); init( context, attrs ); } private void init(Context context, AttributeSet attrs) { TypedArray ta = context.obtainStyledAttributes( attrs, R.styleable.Fonts ); if ( ta != null ) { String fontAsset = ta.getString( R.styleable.Fonts_font ); if ( !StringUtils.isEmpty( fontAsset ) ) { int type = Integer.parseInt( fontAsset ); Typeface typeFace = FontManager.getInstance( context ).getByType( type ); ta.recycle(); super.setTypeface( typeFace ); } } } } public class FontManager { private static FontManager Instance; private Context context; private Typeface robotoCondensedBold; private Typeface robotoCondensed; private Typeface robotoLight; private Typeface kronica; private Typeface montserrat; private Typeface montserratLight; private Typeface keepCalmMedium; private FontManager(Context context) { this.context = context; this.robotoCondensedBold = Typeface.createFromAsset( context.getAssets(), "fonts/RobotoCondensed-Bold.ttf" ); this.robotoCondensed = Typeface.createFromAsset( context.getAssets(), "fonts/RobotoCondensed-Regular.ttf" ); this.robotoLight = Typeface.createFromAsset( context.getAssets(), "fonts/Roboto-Light.ttf" ); this.kronica = Typeface.createFromAsset( context.getAssets(), "fonts/kronika.ttf" ); this.montserrat = Typeface.createFromAsset( context.getAssets(), "fonts/Montserrat-Regular.ttf" ); this.montserratLight = Typeface.createFromAsset( context.getAssets(), "fonts/Montserrat-Light.ttf" ); this.keepCalmMedium = Typeface.createFromAsset( context.getAssets(), "fonts/KeepCalmMedium.ttf" ); } public synchronized static FontManager getInstance(Context context) { if ( Instance == null ) Instance = new FontManager( context ); return Instance; } public Typeface getByType(int type) { switch ( type ) { case 0: return FontManager.getInstance( context ).getRobotoCondensedBold(); case 1: return FontManager.getInstance( context ).getRobotoLight(); case 2: return FontManager.getInstance( context ).getKronica(); case 3: return FontManager.getInstance( context ).getRobotoCondensed(); case 4: return FontManager.getInstance( context ).getMontserrat(); case 5: return FontManager.getInstance( context ).getMontserratLight(); case 6: return FontManager.getInstance( context ).getKeepCalmMedium(); default: return Typeface.DEFAULT; } } public Typeface getRobotoCondensedBold() { return robotoCondensedBold; } public Typeface getKronica() { return kronica; } public Typeface getRobotoCondensed() { return robotoCondensed; } public Typeface getRobotoLight() { return robotoLight; } public Typeface getMontserrat() { return montserrat; } public Typeface getMontserratLight() { return montserratLight; } public Typeface getKeepCalmMedium() { return keepCalmMedium; }

Además, un font_attrs.xml en su carpeta res :

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Fonts"> <attr name="font" format="enum"> <enum name="robotoCondensedBold" value="0"/> <enum name="robotoLight" value="1"/> <enum name="kronica" value="2"/> <enum name="robotoCondensed" value="3"/> <enum name="montserrat" value="4"/> <enum name="montserratLight" value="5"/> <enum name="keepCalmMedium" value="6"/> </attr> </declare-styleable> </resources>

Tenga en cuenta que solo necesita modificar FontManager y font_attrs.xml para personalizar sus fuentes.


Puede usar la clase de botón personalizado como se indica a continuación. Coloque su fuente en la carpeta de activos / fuentes.

public class CustomButton extends Button{ public CustomButton(Context context, AttributeSet attrs) { super(context, attrs); init(); // TODO Auto-generated constructor stub } public CustomButton(Context context) { super(context); init(); // TODO Auto-generated constructor stub } public CustomButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); // TODO Auto-generated constructor stub } private void init(){ Typeface font_type=Typeface.createFromAsset(getContext().getAssets(), "font/ProximaNova-Bold.ttf"); setTypeface(font_type); } }

Ahora puede usar el botón en xml como se indica a continuación.

<model.CustomButton android:id="@+id/search" android:layout_width="@dimen/edittext_width_large" android:layout_height="@dimen/button_height" android:layout_below="@+id/cars" android:layout_centerHorizontal="true" android:layout_marginTop="@dimen/pad_20dp" android:background="@drawable/button_pressed_bg" android:text="@string/find_car" android:textColor="@color/white" />


Si planea agregar la misma fuente a varios botones, le sugiero que vaya hasta el final y lo implemente como un botón de estilo y subclase:

public class ButtonPlus extends Button { public ButtonPlus(Context context) { super(context); } public ButtonPlus(Context context, AttributeSet attrs) { super(context, attrs); CustomFontHelper.setCustomFont(this, context, attrs); } public ButtonPlus(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); CustomFontHelper.setCustomFont(this, context, attrs); } }

Esta es una clase auxiliar para establecer una fuente en un TextView (recuerde, el botón es una subclase de TextView) basado en el atributo com.my.package: font:

public class CustomFontHelper { /** * Sets a font on a textview based on the custom com.my.package:font attribute * If the custom font attribute isn''t found in the attributes nothing happens * @param textview * @param context * @param attrs */ public static void setCustomFont(TextView textview, Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFont); String font = a.getString(R.styleable.CustomFont_font); setCustomFont(textview, font, context); a.recycle(); } /** * Sets a font on a textview * @param textview * @param font * @param context */ public static void setCustomFont(TextView textview, String font, Context context) { if(font == null) { return; } Typeface tf = FontCache.get(font, context); if(tf != null) { textview.setTypeface(tf); } } }

Y aquí está la FontCache para reducir el uso de memoria en dispositivos más antiguos :

public class FontCache { private static Hashtable<String, Typeface> fontCache = new Hashtable<String, Typeface>(); public static Typeface get(String name, Context context) { Typeface tf = fontCache.get(name); if(tf == null) { try { tf = Typeface.createFromAsset(context.getAssets(), name); } catch (Exception e) { return null; } fontCache.put(name, tf); } return tf; } }

En res / values ​​/ attrs.xml definimos el atributo de estilo personalizado

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CustomFont"> <attr name="font" format="string"/> </declare-styleable> </resources>

Y finalmente un ejemplo de uso en un diseño:

<com.my.package.buttons.ButtonPlus style="@style/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_sometext"/>

Y en res / values ​​/ style.xml

<style name="button" parent="@android:style/Widget.Button"> <item name="com.my.package:font">fonts/copperplate_gothic_light.TTF</item> </style>

Esto puede parecer mucho trabajo, pero me agradecerás una vez que tengas un puñado de botones y campos de texto en los que quieras cambiar la fuente.