メインアクティビティで次のコードを使用して、アクションバーで簡単なメニュー項目を使用しています。
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から設定する必要があると思います。提案はありますか?
Styles.xmlのアクティビティに「Android:actionMenuTextAppearance」アイテムを追加します。
<style name="AppThemeActivity" parent="Theme.AppCompat.Light">
<item name="Android:actionMenuTextAppearance">@style/yourstyle</item>
...
</style>
このスタイルをマニフェストのアクティビティに適用します。
<activity
Android:theme="@style/AppThemeActivity"
.../>
わかりました、これが私の解決策です。実際にテキストを取得し、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%増やします。
この一番下のコード行のようなスタイル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"
質問されてから長い時間が経ちましたが、スティーブンスミスの回答がすべてのビューを変更するため、このソリューションが気に入っています。
この行を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>
古い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"
/>
または、使用しているテーマの値/スタイル項目でフォントサイズを設定できます。私の場合、AndroidManifest.xmlファイルに示されているスタイルは次のとおりです。
Android:theme="@style/AppTheme"
AppThemeの私のスタイルは次のとおりです。
<style name="AppTheme" parent="AppBaseTheme">
<item name="Android:textSize">20sp</item>
</style>
それはアイテムのために動作しませんが、奇妙なようです...