更改文本android中菜单项的大小

问题描述 投票:14回答:5

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

    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设置,因为它与设计相关。有什么建议吗?

android android-layout android-menu
5个回答
8
投票

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

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

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

<activity 
android:theme="@style/AppThemeActivity"
.../>

5
投票

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

所以这已经很久了,但是我喜欢这个解决方案,因为史蒂文史密斯的回答改变了每一个观点:

将此行添加到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>

3
投票

像这个底部代码行添加到样式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"

0
投票

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

android:theme="@style/AppTheme"

所以Apptheme的风格现在是:

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

看起来很奇怪它虽然不适用于该项目......

© www.soinside.com 2019 - 2024. All rights reserved.