web-dev-qa-db-ja.com

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

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属性の仕事ですか?または、そうするための他の方法はありますか?テキストのサイズは、デザインに関連するものなので、JavaではなくXMLから設定する必要があると思います。提案はありますか?

14
Hafiz

Styles.xmlのアクティビティに「Android:actionMenuTextAppearance」アイテムを追加します。

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

このスタイルをマニフェストのアクティビティに適用します。

<activity 
Android:theme="@style/AppThemeActivity"
.../>
8
Pink Cocot

わかりました、これが私の解決策です。実際にテキストを取得し、RelativeSizeSpan(デフォルトと比較してテキストサイズが必要な場合)またはAbsoluteSizeSpan(手動でテキストサイズを入力したい場合)でフォントを変更するためにSpannableStringを使用できます):

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%増やします。

6
John Petrucci

この一番下のコード行のようなスタイル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>

navigationViewに「menu_text_style」を追加する必要があります

        app:itemTextAppearance="@style/menu_text_style"
4
Caner Yılmaz

質問されてから長い時間が経ちましたが、スティーブンスミスの回答がすべてのビューを変更するため、このソリューションが気に入っています。

この行を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
jobbert

古い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>

あなたのmanifest

<activity
        Android:name=".MainActivity"
        Android:theme="@style/AppTheme"
        />
1
researcher

または、使用しているテーマの値/スタイル項目でフォントサイズを設定できます。私の場合、AndroidManifest.xmlファイルに示されているスタイルは次のとおりです。

Android:theme="@style/AppTheme"

AppThemeの私のスタイルは次のとおりです。

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

それはアイテムのために動作しませんが、奇妙なようです...

0
steven smith