23

我通过在主要活动中使用以下代码在操作栏中使用简单的菜单项:

    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;
    }
}

这是 main.xml 中的菜单 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 设置,因为它是设计相关的东西。有什么建议吗?

4

7 回答 7

15

好的,这是我的解决方案,您实际上可以使用 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%。

于 2015-09-04T14:14:41.593 回答
9

将自定义字体大小添加到样式 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”添加到您的 NavigationView

        app:itemTextAppearance="@style/menu_text_style"
于 2017-12-27T11:06:39.500 回答
8

在您的 styles.xml 中为您的活动添加“android:actionMenuTextAppearance”项:

<style name="AppThemeActivity" parent="Theme.AppCompat.Light">
    <item name="android:actionMenuTextAppearance">@style/yourstyle</item>
    ...
</style>

将此样式应用于您的清单中的活动:

<activity 
android:theme="@style/AppThemeActivity"
.../>
于 2015-07-21T10:00:01.117 回答
5

所以自从被问到这个问题已经很长时间了,但我喜欢这个解决方案,因为 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>
于 2017-07-07T09:35:05.450 回答
3

运行良好,在旧 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"
        />
于 2019-06-05T14:25:00.630 回答
0

或者,您可以在值/样式项中为您使用的主题设置字体大小。在我的情况下,AndroidManifest.xml 文件中指示的样式是:

android:theme="@style/AppTheme"

所以我现在的 AppTheme 风格是:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:textSize">20sp</item>
</style>

看起来很奇怪,但它不适用于该项目......

于 2014-08-05T03:52:45.170 回答
-2
<style name="RobotoTextViewStyleEn" parent="android:Widget.TextView">
    <item name="android:textSize">15sp</item>
    <item name="android:textColor">#868784</item>
</style>

navigationView.setItemTextAppearance(R.style.RobotoTextViewStyle);
于 2021-06-12T11:17:46.427 回答