在android中更改菜单项的文本大小
我通过在主活动中使用以下代码在操作栏中使用简单菜单项:在android中更改菜单项的文本大小,android,android-layout,android-menu,Android,Android Layout,Android Menu,我通过在主活动中使用以下代码在操作栏中使用简单菜单项: 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 {
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
attributeUTE不应该工作吗?还是有其他方法可以做到这一点?我认为应该从XML而不是java设置文本大小,因为这是与设计相关的事情。有什么建议吗?或者您可以在“值/样式”项目中为正在使用的主题设置字体大小。在我的例子中,AndroidManifest.xml文件中指示的样式是:
android:theme="@style/AppTheme"
因此,我现在对AppTheme的风格是:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:textSize">20sp</item>
</style>
20便士
似乎很奇怪,它不适用于该项目,但…在样式中为您的活动添加“android:ActionMenuTextExearance”项目。xml:
<style name="AppThemeActivity" parent="Theme.AppCompat.Light">
<item name="android:actionMenuTextAppearance">@style/yourstyle</item>
...
</style>
@风格/你的风格
...
将此样式应用于清单中的活动:
<activity
android:theme="@style/AppThemeActivity"
.../>
好的,这就是我的解决方案,您可以使用SpannableString获取文本,然后通过RelativeSizeSpan(如果您希望文本大小相对于默认值)或AbsoluteSizeSpan(如果您希望手动输入文本大小)更改字体:
public boolean oncreateoptions菜单(菜单菜单){
super.onCreateOptions菜单(菜单);
MenuInflater=getMenuInflater();
充气(右菜单菜单主菜单);
对于(int i=0;i
本例将菜单项文本的大小增加了50%。因此,很久没有人问过这个问题了,但我喜欢这个解决方案,因为steven Smith的答案会改变每个视图:
将此行添加到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>
18便士
无衬线灯
将自定义字体大小添加到样式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>
在旧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"
/>
@样式/操作菜单文本外观
@样式/操作菜单文本外观
16便士
#1A1A
在您的清单中:
<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"
/>
15便士
#868784
navigationView.setItemTextAppearance(R.style.RobotoTextViewStyle);
您是否尝试过在android:textSize=“
标记中使用dp
或px
?@SalmanKhakwani:尝试过,但不起作用。TextView:(这就是问题所在:它会改变每个视图。大多数程序员希望文本大小根据屏幕大小/密度而变化。这就是我的意思,我的解决方案不会改变每个视图。我的意思是,您的解决方案不是与屏幕大小/密度无关的。我需要一种方法,使菜单项随着屏幕大小而增长。@FractalBob SP和DP是屏幕独立。如果您希望在百分比中具有相同的大小,则应使用百分比。但不建议这样做。@FractalBob,如果sp/dp不按您的要求进行操作,则您要做的事情将非常困难,因为您不知道大小(以像素为单位)你的目标是直到布局出现。我认为大多数程序员希望字体在屏幕上显示相同的物理大小,而不管它显示在屏幕上的像素大小/分辨率。这就是dp/sp的目的。不——它不会改变每个文本视图——它只会改变使用AppTheme的文本视图。你可以自由定义不同的样式和字体大小/颜色/字体,并根据需要应用它。
<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);