我正在尝试使用Android中的XML文件定义GUI布局.据我所知,没有办法指定您的小部件应该在XML文件中使用自定义字体(例如,您放置在assets/font /中的字体),并且您只能使用系统安装的字体.
我知道,在Java代码中,我可以使用唯一ID手动更改每个窗口小部件的字体.或者,我可以迭代Java中的所有小部件来进行此更改,但这可能会非常慢.
我还有其他选择吗?有没有更好的方法来制作具有自定义外观的小部件?我不是特别想要为我添加的每个新小部件手动更改字体.

我制作了一个ToolBar,但是当我在menu.xml中添加菜单项时,它总是显示为溢出.如何单独添加?此外,标题显示在中间(垂直),如何在顶部显示?
menu.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.toolbar.MainActivity" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_launcher"
android:title="@string/action_search"
android:showAsAction="ifRoom"
android:orderInCategory="1"
android:menuCategory="secondary"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package com.example.toolbar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
// toolbar.setNavigationIcon(R.drawable.back);
toolbar.setLogo(R.drawable.ic_launcher);
//toolbar.setTitle("Title");
// toolbar.setSubtitle("Subtitle");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it …Run Code Online (Sandbox Code Playgroud) 我想更改警报对话框标题的字体 ..
任何人都可以告诉我该怎么做...?
任何帮助,将不胜感激..
从我需要开发的应用程序,我收到了一个特定的字体,有很多文件,如FontName-Regular,FontName-Bold,FontName-it.我需要在应用程序的所有textview中使用它.首先,我认为这是一项简单的任务.看看SO,找到一个非常好的线程:这里
所以首先我喜欢:
public static void overrideFonts(final Context context, final View v) {
try {
if (v instanceof ViewGroup) {
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
overrideFonts(context, child);
}
} else if (v instanceof TextView) {
((TextView)v).setTypeface(FONT_REGULAR);
}
} catch (Exception e) {
e.printStackTrace();
// ignore
}
}
Run Code Online (Sandbox Code Playgroud)
在我的活动中onCreate期间调用此方法.我的应用程序中的每个textView都显示出字体和男孩,我很高兴能够轻松逃离.直到我进入一个屏幕,其中一些textviews需要Bold as Style(android:textStyle="bold").然后我意识到这个解决方案不能让我从资产中加载Font-Bold .ttf.
比较深入,看到一个很好的自定义TextView实现,在同样的SO问题:
public class MyTextView extends TextView …Run Code Online (Sandbox Code Playgroud) 我想将自定义字体应用于我的应用程序的标题,该标题显示在ActionBar上.以前我没有使用任何支持库和这个解决方案:
int titleId = getResources().getIdentifier("action_bar_title", "id",
"android");
TextView yourTextView = (TextView) findViewById(titleId);
yourTextView.setTypeface(face);
Run Code Online (Sandbox Code Playgroud)
对我来说很好.但是现在我使用材质设计SupportActionBar,这会抛出NullPointerException.那么如何在使用AppCompat时更改ActionBar字体?
android android-layout android-fonts android-actionbar android-actionbar-compat
在我的应用程序中,我从显示的每个片段更改ActionBar中的标题.当我第一次启动我的应用程序时,我得到了一个请求列表,所以我的标题是"我的请求(20)".
然后,当您单击该列表中的项目时,它将替换我的Activity中的片段,并将标题设置为"Action".
当我回到第一个视图(总是在同一个Activity中)时,我将标题重置为"我的请求(20)",但是android决定截断它.结果就是"我的要求......".
经过多次测试后,当我在其中放入较小的文本时,看起来Android正在缩小我的标题.但是当我放一个较长的文字时,即使有足够的空间,它也不会放大.
我该怎么做才能解决这个问题?我想要一个更好的解决方案,而不是在我的短标题结尾添加空格:)
这是我用来更改ActionBar标题的代码:
getActivity().getActionBar().setTitle(title);
Run Code Online (Sandbox Code Playgroud) 我想为其中的"视频"和"图像"标签设置字体ActionBarSherlock.我使用以下代码来执行此操作.它在ICS中准确显示,但在较低版本的设备中没有显示,但我通过设置TYPE FACE,在本应用程序的其他部分显示了准确的输出...
a.settypeface("ab.tttf");
a.settext("VIDEO");
Run Code Online (Sandbox Code Playgroud)
但如何做我设置TypeFace在ActionBar此代码:
mTabsAdapter.addTab(bar.newTab().setText("IMAGE"), AFragment.class, null);
mTabsAdapter.addTab(bar.newTab().setText("VIDEO"), BFragment.class, null);
Run Code Online (Sandbox Code Playgroud) 我尝试了几种不同的方法,包括在这里找到的方法(这反过来让我尝试了这个问题的两个最佳答案),以及使用反射来访问TextView并设置相关方法.两次尝试均失败,前者导致根本没有文本被设置为标题(我将文本设置为正确的textview元素),后者设置文本并删除椭圆,但根本没有绘制.以下是我的反思尝试.
import android.content.Context;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Field;
public class MarqueeToolbar extends Toolbar {
public MarqueeToolbar(Context context) {
super(context);
}
public MarqueeToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setTitle(CharSequence title) {
if (!reflected) {
reflected = reflectTitle();
}
super.setTitle(title);
}
@Override
public void setTitle(int resId) {
if (!reflected) {
reflected = reflectTitle();
} …Run Code Online (Sandbox Code Playgroud) java android android-actionbar android-5.0-lollipop android-toolbar
在尝试修改我的ActionBar标题字体时,我找到了一个答案,建议调整Typeface通过a SpannableString.虽然它的工作原理如答案中所述,但放置似乎偏离垂直居中.

我尝试过两种不同的字体,包括OpenType(Roundhand)和TrueType(Billabong).此外,我在一台较旧的Gingerbread设备(屏幕截图来自)上运行2.3.3以及通过运行4.2的较新的Jelly Bean设备试用了这个.该项目使用ActionBarSherlock,因此是我最后的理论罪魁祸首.我也调整了字体大小,希望它略微居中,但要知道这只不过是一个黑客,并没有解决手头的最终问题.
有了这个,为什么我的标题没有适当集中,我该如何纠正呢?如果有一种方法来调整上面引用的实现解决方案的对齐,那肯定就足够了,即使ActionBarSherlock是罪魁祸首.然而,知道罪魁祸首是什么以及为什么会发生这种情况是答案的一部分,而不仅仅是提供一种解决方法.
更新:
下面的屏幕截图使用了Show layout bounds.请注意,为了使用Show布局边界,该设备显然正在运行Jelly Bean,而之前的截图来自Gingerbread设备.在任何一种情况下,问题都是一样的.

更新:
如果我Typeface.DEFAULT在调用setSpan边界时使用,并且对齐方式应该出现.

更新:
在尝试第三种字体时,问题似乎与字体有关.
