zte teclado para letras letra fuentes fuente descargar como celular cambiar android menuitem

teclado - ¿Cómo cambiar la fuente personalizada del elemento del menú de Android?



fuentes de letras (8)

Tengo el siguiente código Java y XML de Android. Quiero cambiar la fuente de los elementos del menú de mi aplicación. Solo sé que podemos cambiar la fuente de TextView usando setTypeface pero no podemos encontrar de ninguna manera el Elemento del Menú.

Código JAVA-:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh1: Toast.makeText(this, "Item1 Selected", Toast.LENGTH_SHORT) .show(); break; case R.id.action_refresh2: Toast.makeText(this, "Item2 Selected", Toast.LENGTH_SHORT) .show(); break; default: break; } }

Código XML-:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_refresh1" android:orderInCategory="100" android:showAsAction="always" android:title="Item1"/> <item android:id="@+id/action_refresh2" android:orderInCategory="100" android:showAsAction="always" android:title="Item2"/> </menu>

Quiero cambiar la fuente de dos elementos de menú, pero no sé cómo integrar settypface para Elemento de menú.


Crear estilo en styles.xml

<style name="Style_TextView"> <item name="fontFamily">@font/myriadproregular</item> </style>

Agregue el código a continuación en android.support.design.widget.NavigationView

app:itemTextAppearance="@style/Style_TextView"

Nota: Funciona para android.support.design.widget.NavigationView


Encontré que esta solución es útil para mí. Espero que ayude a nuevos surfistas.

tu menu main.xml

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/item1" android:title="User" android:orderInCategory="100" android:visible="true" app:showAsAction="always" app:actionViewClass="android.widget.Button" /> </menu>

Después de inflar el menú personalizado, puede hacer una referencia al elemento del menú. Cuando obtenga la referencia al elemento del menú, podrá personalizar el elemento para mostrar el ícono y el texto Unicode. Su archivo de imagen de icono debe almacenarse en el

carpeta res / drawable.

@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); //reference to the item of the menu MenuItem i=menu.findItem(R.id.item1); Button button_menu =(Button) i.getActionView(); if(itemuser!=null){ // Create Typeface object to use unicode font in assets folder Typeface font= Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/arial.ttf"); // Set unicode font to menu item button_menu .setTypeface(font); // Set item text and color button_menu .setText(getResources().getString(R.string._text)); button_menu .setTextColor(Color.WHITE); // Make item background transparent button_menu .setBackgroundColor(Color.TRANSPARENT); // Show icon next to the text Drawable icon=getApplicationContext().getResources().getDrawable( R.drawable.user); button_menu .setCompoundDrawablesWithIntrinsicBounds( icon, null, null, null ); } return true; }


La respuesta de @brahmyadigopula funciona bien.

Aquí hay una versión más completa para simplificar:

El menú

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <item android:id="@+id/update" android:showAsAction="always" android:title="@string/menu_update" tools:ignore="UnusedAttribute" android:actionViewClass="android.widget.Button"/> </menu>

En su actividad o fragmento:

// Inflater the menu based on the layout above inflater.inflate(menuRes, menu); // Set font type face if (setCustomFontType){ final MenuItem menuItem = menu.findItem(R.id.update); String title = menuItem.getTitle().toString(); Button button_menu = (Button) menuItem.getActionView(); button_menu.setTypeface("<REPLACE_WITH_FONT_NAME>"); button_menu.setText(title); button_menu.setTextColor(Color.WHITE); button_menu.setBackgroundColor(_getResources().getColor(R.color.transparent_color)); button_menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onOptionsItemSelected(menuItem); } }); } super.onCreateOptionsMenu(menu, inflater);


Si su aplicación solo necesita funcionar en Android P es decir, (nivel de API 28) y superior, puede construir un TypefaceSpan desde un Typeface en onPrepareOptionsMenu . De lo contrario, puede usar una clase CustomTypefaceSpan como lo sugiere esta answer :

public boolean onPrepareOptionsMenu(Menu menu) { int customFontId = R.font.metropolis_medium; for (int i = 0; i < menu.size(); i++) { MenuItem menuItem = menu.getItem(i); String menuTitle = menuItem.getTitle().toString(); Typeface typeface = ResourcesCompat.getFont(this, customFontId); SpannableString spannableString = new SpannableString(menuTitle); // For demonstration purposes only, if you need to support < API 28 just use the CustomTypefaceSpan class only. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) { TypefaceSpan typefaceSpan = typeface != null ? new TypefaceSpan(typeface) : new TypefaceSpan("sans-serif"); spannableString.setSpan(typefaceSpan, 0, menuTitle.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); } else { CustomTypefaceSpan customTypefaceSpan = typeface != null ? new CustomTypefaceSpan(typeface) : new CustomTypefaceSpan(Typeface.defaultFromStyle(Typeface.NORMAL)); spannableString.setSpan(customTypefaceSpan, 0, menuTitle.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); } menuItem.setTitle(spannableString); } return true; }

main.menu.xml:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/settings" android:onClick="openSettings" android:title="@string/settings" app:showAsAction="never" /> <item android:id="@+id/about" android:onClick="openAbout" android:title="@string/about" app:showAsAction="never" /> </menu>

Antes después:


Simplemente configure la propiedad itemTextAppearance de NavigationView en el estilo del sistema o personalizado:

<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main_navigation" app:itemBackground="@color/white" app:itemTextAppearance="@style/TextAppearance.AppCompat" app:itemTextColor="@color/saintpatrickblue" app:menu="@menu/activity_main_navigation_drawer"/>


También puede usar un SpannableStringBuilder cuando agrega un elemento de menú con un TypefaceSpan . Para cada elemento del menú, haga algo como

TypefaceSpan span = new TypefaceSpan("<REPLACE_WITH_FONT_NAME>"); SpannableStringBuilder title = new SpannableStringBuilder("My Menu Item Title"); title.setSpan(span, 0, title.length(), 0); menu.add(Menu.NONE, id, index, title);


XML

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_edit" android:title="@string/edit" android:visible="true" app:showAsAction="always" /> </menu>

EN ACTIVIDAD O EN FRAGMENTO

@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { Typeface face = Typeface.createFromAsset(getActivity().getAssets(),"fonts/OpenSans-Regular.ttf"); // THIS TypefaceSpan face = new TypefaceSpan("<REPLACE_WITH_FONT_NAME>"); // OR THIS SpannableStringBuilder title = new SpannableStringBuilder(getContext().getString(R.string.edit)); title.setSpan(face, 0, title.length(), 0); menu.add(Menu.NONE, R.id.action_edit, 0, title); // THIS MenuItem menuItem = menu.findItem(R.id.action_edit); // OR THIS menuItem.setTitle(title); super.onCreateOptionsMenu(menu, inflater); }


debe proporcionar un diseño personalizado para el elemento de menú.

Primero, en tu menú XML establece uno de los siguientes

CASO 1 si está utilizando la biblioteca de soporte:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_save" android:title="@string/action_save" android:icon="@drawable/ic_action_save" android:orderInCategory="100" app:showAsAction="always" app:actionLayout="@layout/layout_menu_save"/> </menu>

CASO 2 si no está utilizando la biblioteca de soporte:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_save" android:title="@string/action_save" android:icon="@drawable/ic_action_save" android:orderInCategory="100" android:showAsAction="always" android:actionLayout="@layout/layout_menu_save"/> </menu>

Luego, en el actionLayout (layout_menu_save.xml en mi ejemplo) escribe lo siguiente:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@drawable/background_transparent_stateful"> <com.example.YourCustomTypefaceTextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:gravity="center_vertical" android:text="@string/action_save"/> <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:gravity="center_vertical" android:src="@drawable/ic_action_save" android:contentDescription="@string/action_save"/> </LinearLayout>

El fondo dibujable (background_transparent_stateful) es útil para tener comentarios táctiles en su diseño personalizado:

<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="#20FFFFFF"> </item> <item android:drawable="@android:color/transparent"> </item> </selector>

De esta manera, tendrá un texto con una fuente personalizada a la izquierda como una etiqueta con un icono a la derecha.

¡Obviamente puedes personalizar el diseño como prefieras!


EDITAR :
Si está utilizando la biblioteca de asistencia y su tema de actividad amplía el AppCompatTheme, puede obtener el " efecto de onda " típico de Lollipop para una retroalimentación táctil más atractiva. Solo reemplaza el fondo personalizado con:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="?attr/selectableItemBackgroundBorderless"> ... </LinearLayout>