Изменение текста Размер элемента меню в android
Я использую простые пункты меню в панели действий, используя следующий код в основном действии:
package com.kaasib.ftpclient;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.app.ActionBar;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
boolean ret;
if(item.getItemId() == R.id.connection_manager){
ret = true;
}else{
ret = super.onOptionsItemSelected(item);
}
return ret;
}
}
Вот меню xml в main.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/connection_manager"
android:orderInCategory="100"
android:showAsAction="collapseActionView"
android:title="@string/connection_manager"
android:textSize="2sp"
/>
</menu>
Он работает, за исключением того, что он не меняет размер текста. Прямо сейчас размер текста для элемента меню больше, а размер шрифта меньше. Так что я делаю неправильно? Не следует ли android:textSize
отнести работу? Или есть другой способ сделать это? Я считаю, что размер текста должен быть установлен из XML, а не из java, поскольку это связано с дизайном. Любое предложение?
Ответы
Ответ 1
Добавьте элемент "android: actionMenuTextAppearance" для ваших действий в ваших стилях. xml:
<style name="AppThemeActivity" parent="Theme.AppCompat.Light">
<item name="android:actionMenuTextAppearance">@style/yourstyle</item>
...
</style>
Примените этот стиль к своей деятельности в манифесте:
<activity
android:theme="@style/AppThemeActivity"
.../>
Ответ 2
Итак, это мое решение, вы можете использовать SpannableString для извлечения текста, а затем сменить шрифт через RelativeSizeSpan (если вы хотите, чтобы размер текста был по умолчанию) или через AbsoluteSizeSpan (если вы хотите вручную ввести размер текста):
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater awesome = getMenuInflater();
awesome.inflate(R.menu.menu_main, menu);
for(int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
SpannableString spanString = new SpannableString(menu.getItem(i).getTitle().toString());
int end = spanString.length();
spanString.setSpan(new RelativeSizeSpan(1.5f), 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
item.setTitle(spanString);
}
return true;
}
В этом примере размер текста элементов меню увеличивается на 50%.
Ответ 3
Проверьте следующую ссылку! Вы можете увидеть, как создать свои собственные пункты меню!
Пользовательские элементы меню
Ответ 4
Так прошло много времени с тех пор, как это было задано, но мне нравится это решение, поскольку steven smiths отвечает на изменения каждого вида:
Добавьте эту строку в NavigationView:
app:itemTextAppearance="@style/MenuItems"
И это стилям:
<style name="MenuItems" parent="AppTheme">
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif-light</item>
</style>
Ответ 5
добавить в файл стиля xml, например, эту нижнюю строку кода, свой собственный размер шрифта,
после этого
<style name="menu_text_style" parent="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Menu">
<item name="android:textSize">16sp</item>
<item name="android:textColor">@color/tab_default_color</item>
<item name="android:textAllCaps">false</item>
</style>
после того, как "menu_text_style" добавит в навигационное меню
app:itemTextAppearance="@style/menu_text_style"
Ответ 6
Или вы можете установить размер шрифта в элементе values /styles для темы, которую вы используете. В моем случае стиль, указанный в файле AndroidManifest.xml:
android:theme="@style/AppTheme"
Итак, мой стиль для AppTheme теперь:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:textSize">20sp</item>
</style>
Кажется странным, что он не работает для элемента, хотя...
Ответ 7
Работает хорошо, на старом API также:
В вашем style.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="actionMenuTextAppearance">@style/ActionMenuTextAppearance</item>
<item name="android:actionMenuTextAppearance">@style/ActionMenuTextAppearance</item>
</style>
<style name="ActionMenuTextAppearance" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#1a1a1a</item>
</style>
В вашем манифесте:
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme"
/>