icono - personalizar action bar android studio
Cómo establecer una fuente personalizada para el título en la barra de herramientas de Android (11)
yo estoy haciendo esto
toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
setSupportActionBar(toolbar);
setTitle("hello");
Quiero establecer una fuente personalizada aquí en el título "hola" ¿cómo hacer eso?
Colocación de fuentes:
- En primer lugar, descargue un archivo .ttf. Mi archivo es Balker.ttf
- asegúrese de tener una carpeta de "activos". Si no hay ninguno, haga clic con el botón derecho sobre la aplicación y vaya a Nueva carpeta> Carpeta de activos
- En la carpeta de activos, cree una nueva carpeta y asígnele el nombre ''font''
- Coloque su archivo, como lo hice con Balker.ttf, en la carpeta ''font''.
Vaya al archivo java de la actividad cuya fuente debe personalizar. Personalicé la actividad principal aquí.
for(int i = 0; i < toolbar.getChildCount(); i++) { View view = toolbar.getChildAt(i); if(view instanceof TextView) { TextView textView = (TextView) view; Typeface myCustomFont=Typeface.createFromAsset(getAssets(),"font/Balker.ttf"); textView.setTypeface(myCustomFont); } }
Desde android.support.v7.appcompat 24.2
Toolbar
tiene el método setTitleTextAppearance
y puede establecer su fuente sin textview
externo.
crear nuevo estilo en styles.xml
<style name="RobotoBoldTextAppearance">
<item name="android:fontFamily">@font/roboto_condensed_bold</item>
</style>
y usarlo
mToolbar.setTitleTextAppearance(this, R.style.RobotoBoldTextAppearance);
Esto funciona para mí
typeFace= Typeface.createFromAsset(this.getAssets(), "fonts/myfont.ttf");
((TextView)toolbar.getChildAt(1)).setTypeface(typeFace);
Gracias @gmetax, es un buen punto. Es malo acceder a la vista de texto para cada actividad. Tenemos que escribir el código a continuación para cada actividad:
TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);
Ya hemos vinculado la barra de herramientas y usamos toolbar.setTitle (). Por lo tanto, amplié la barra de herramientas y anulé el método setTitle de la siguiente manera:
@Override
public void setTitle(CharSequence title) {
super.setTitle("");
mTitle = (TextView) findViewById(R.id.toolbar_title);
if (mTitle != null) {
if (!TextUtils.isEmpty(title)) {
mTitle.setText(title);
}
}
}
(Por supuesto, la fuente personalizada debería estar configurada en CustomTextView class.setTypeface) Ahora, podemos usarlo así:
toolbar.setTitle("bla bla");
Para utilizar un título personalizado en la barra de herramientas, todo lo que debe hacer es recordar que la barra de herramientas es solo un elegante grupo de vistas, por lo que puede agregar un título personalizado como este:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_top"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/action_bar_bkgnd"
app:theme="@style/ToolBarTheme" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Toolbar Title"
android:layout_gravity="center"
android:id="@+id/toolbar_title" />
</android.support.v7.widget.Toolbar>
Esto significa que puede aplicar estilo a la vista de texto de la forma que desee porque es solo una vista de texto normal. Entonces, en tu actividad puedes acceder al título de la siguiente manera:
Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top);
TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);
Y entonces:
Typeface khandBold = Typeface.createFromAsset(BalrogApplication.getApplication().getAssets(), "fonts/Khand-bold.ttf");
mTitle.setTypeface(khandBold);
ACTUALIZAR dinámicamente la versión
public static void changeToolbarFont(Toolbar toolbar, Activity context) {
for (int i = 0; i < toolbar.getChildCount(); i++) {
View view = toolbar.getChildAt(i);
if (view instanceof TextView) {
TextView tv = (TextView) view;
if (tv.getText().equals(toolbar.getTitle())) {
applyFont(tv, context);
break;
}
}
}
}
public static void applyFont(TextView tv, Activity context) {
tv.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/customFont"));
}
y úsalo así
changeToolbarFont(findViewById(R.id.app_bar), this);
Puede crear la carpeta de fuentes en el directorio res en la última versión de Android studio 3. Después de esto, debe definir el estilo personalizado en los estilos , y después de esto, debe usar titleTextAppearance en la barra de herramientas para definir su estilo.
Pasos como a continuación.
1. Cree el directorio de fuentes: res > Directorio de recursos de Android > Tipo de recurso: fuentes , y haga clic en Aceptar para crear el directorio de fuentes (Android studio 3).
- Abra styles.xml y cree un estilo personalizado como a continuación
<style name = " TextAppearance.TabsFont " parent = " android: TextAppearance ">
<item name="android:fontFamily">font/rmedium</item>
<item name="android:textSize">18sp</item>
</style>
3.Ahora abra el diseño y agregue la aplicación: titleTextAppearance = "@ style / TextAppearance.TabsFont" a la etiqueta de la barra de herramientas, como a continuación.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbarMain"
app:title="@string/time_amp_date"
app:titleTextAppearance="@style/TextAppearance.TabsFont"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/AppTheme"
app:elevation="2dp" />
Eso está HECHO . Ahora, si ejecuta la aplicación, puede ver el conjunto de fuentes en su barra de herramientas.
Puede usar este método simple para establecer la fuente personalizada en el título de la barra de herramientas.
Toolbar toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
TextView tv = getToolBarTextView();
tv.settext("Hello");
private TextView getToolBarTextView() {
TextView titleTextView = null;
try {
Field f = mToolBar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
titleTextView = (TextView) f.get(mToolBar);
Typeface font = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/mfont.ttf");
titleTextView.setTypeface(font);
} catch (NoSuchFieldException e) {
} catch (IllegalAccessException e) {
}
return titleTextView;
}
Si alguien tiene problemas para obtener el título de la barra de herramientas múltiple (uno por defecto y uno que haya establecido) para xml:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:layout_gravity="left"
android:id="@+id/toolbar_title"
android:textSize="20sp"/>
</android.support.v7.widget.Toolbar>
entonces haz esto:
getSupportActionBar().setTitle(null);//Set the default to null
typeFace= Typeface.createFromAsset(getAssets(), "fonts/Raleway-Light.ttf");
toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
toolbarTitle.setTypeface(typeFace);
Si está utilizando fuentes de Google (es decir, Open Sans) puede agregar TextView como elemento secundario de su barra de herramientas como este
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:fontFamily="@font/open_sans"/>
</android.support.v7.widget.Toolbar>
y luego simplemente configure la propiedad fontFamily para su TextView en el menú de Atributos (opción Más Fuentes al final de la lista desplegable)
android:fontFamily="@font/open_sans
Todavía quería usar los métodos de título de las Barras de herramientas (ni quería tener una clase personalizada de Barra de herramientas), por lo que no me fue útil agregar el TextView personalizado dentro del elemento xml de la Barra de herramientas. En cambio, utilicé el siguiente método para encontrar TextView:
public static void applyFontForToolbarTitle(Activity context){
Toolbar toolbar = (Toolbar) context.findViewById(R.id.app_bar);
for(int i = 0; i < toolbar.getChildCount(); i++){
View view = toolbar.getChildAt(i);
if(view instanceof TextView){
TextView tv = (TextView) view;
Typeface titleFont = Typeface.
createFromAsset(context.getAssets(), "fonts/customFont");
if(tv.getText().equals(toolbar.getTitle())){
tv.setTypeface(titleFont);
break;
}
}
}
}
Todavía quería usar los métodos de título de las Barras de herramientas, por lo que no me fue útil agregar el TextView personalizado dentro del elemento xml de la Barra de herramientas. En cambio, utilicé el siguiente método para encontrar TextView:
public static void applyFontForToolbarTitle(Activity context){
Toolbar toolbar = (Toolbar) context.findViewById(R.id.app_bar);
for(int i = 0; i < toolbar.getChildCount(); i++){
View view = toolbar.getChildAt(i);
if(view instanceof TextView){
TextView tv = (TextView) view;
Typeface titleFont = Typeface.
createFromAsset(context.getAssets(), "fonts/customFont");
if(tv.getText().equals(context.getTitle())){
tv.setTypeface(titleFont);
break;
}
}
}
}