我想在我的应用中设置字体。
在IOS中,通过使用plist中的“应用程序提供的字体”选项,我可以在应用程序中设置字体。
但是我找不到在Android中设置的方法。
我不想应用整个应用程序,但想要应用我想要的一些活动。
有没有在Android中设置字体的选项? 谢谢。 (从现在开始,我在webview中使用了'WebFont'。但我想要的不是webFont,而是'设置字体')
感谢。
答案 0 :(得分:0)
创建一个类似于此的应用程序类:
public class YourApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
TypeFaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/calibiri.ttf");
}
}
创建Customer TypeFace类:
public class TypeFaceUtil {
public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Map<String, Typeface> newMap = new HashMap<String, Typeface>();
newMap.put("serif", customFontTypeface);
try {
final Field staticField = Typeface.class
.getDeclaredField("sSystemFontMap");
staticField.setAccessible(true);
staticField.set(null, newMap);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
try {
final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
defaultFontTypefaceField.setAccessible(true);
defaultFontTypefaceField.set(null, customFontTypeface);
} catch (Exception e) {
Log.e(TypeFaceUtil.class.getSimpleName(), "Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
}
}
}
}
Atlast下载ttf字体并将其放在资产文件夹中,如果您有任何疑问,最后在清单中声明您的应用程序类请询问
答案 1 :(得分:0)
在assets文件夹中创建一个名为“font”的新文件夹,然后在那里添加你的字体.ttf文件。在代码中,您可以在以后的任何活动中使用和更改视图字体,如下所示:
Typeface robotoBold = Typeface.createFromAsset(getAssets(), "font/roboto_bold.ttf");
textView.setTypeface(robotoBold);
答案 2 :(得分:0)
1.在资产中添加字体文件夹
2.你需要在fonts文件夹中使用font(font_name.ttf)文件。
3.在java代码中添加此内容,
Typeface typeface = Typeface.createFromAsset(getAssets(),
"fonts/font_name.ttf");
textview.setTypeface(typeface);
答案 3 :(得分:0)
嘿Adrian checkout这个链接用于设置android Webview中的字体
http://velmuruganandroidcoding.blogspot.in/2014/08/set-typeface-for-webview-in-android.html
答案 4 :(得分:0)
<强> LargeText.java 强>
public class LargeText extends TextView {
public LargeText(Context context) {
super(context);
init();
}
private void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "your_font_file_name.ttf");
setTypeface(tf);
}
public LargeText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LargeText(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public LargeText(Context context, AttributeSet attrs, int
defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
}
在xml文件中使用以下类:(对于TextView,这是一个例子,你可以为其他组件做这个)
<com.example.demo.LargeText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
答案 5 :(得分:0)
在android中有多种方法可以设置自定义字体。但它不像iOS那么简单,我们必须做一些事情。根据我的经验,一种有效的方法是创建一个CustomTextView,代码如下:
public class CustomTextView extends TextView {
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public CustomTextView(Context context) {
super(context);
init(null);
}
private void init(AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.FontTextView);
String fontName = a.getString(R.styleable.FontTextView_fontName);
if (fontName != null) {
Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "opensans/" + fontName);
setTypeface(myTypeface);
}
a.recycle();
}
}
}
您可以通过为其创建样式来使用自定义TextView:
<style name="TextContentStyle" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">@color/textColorPrimary</item>
<item name="fontName">OpenSans-Regular.ttf</item>
</style>
在布局中,我们使用CustomTextView以上样式:
<com.xx.xx.CustomTextView style="@style/TextContentStyle"
android:layout_width="match_parent"
android:layout_margin="@dimen/margin_medium"
android:gravity="center"
android:text="@string/txt_menu"
android:textColor="#FFF" />
此外,由于Typeface.createFromAsset()不是空闲的,因此我们可以通过缓存之前加载到内存中的字体来优化代码。
public class FontCache {
private static Map<String, Typeface> fontMap = new HashMap<String, Typeface>();
public static Typeface getFont(Context context, String fontName){
if (fontMap.containsKey(fontName)){
return fontMap.get(fontName);
}
else {
Typeface tf = Typeface.createFromAsset(context.getAssets(), fontName);
fontMap.put(fontName, tf);
return tf;
}
}
}
就是这样!我更喜欢这种方式,因为我们可以在任何我们想要的地方使用任何字体类型,在应用程序中使用多种字体类型。
答案 6 :(得分:0)
你可以通过双向方式实现这一目标
您可以在资产中添加和使用.ttf(字体文件) 并像这样使用它:
Typeface myTypeface = Typeface.createFromAsset(getAssets(),"fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);
如果您不想在应用程序中添加字体文件,但想提供可应用的不同字体 你应该从已经安装在设备上的应用程序中获取字体,如下所示:
首先获取设备上安装的应用程序包,如下所示:
String packName = null;
AssetManager assetManager;
Context assetsContext;
String files[];
ArrayList<String> fontList;
private ArrayList<String> getPackName() {
ArrayList<String> packageName = new ArrayList<String>();
final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm
.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
packageName.add(packageInfo.packageName);
}
return packageName;
}
//Now get the assets like this
private void getRes(Context appPackContext, ArrayList<String> appPack) {
ArrayList<String> mPackageList = appPack;
String defPath = "fonts";
for (String packageName : mPackageList) {
packName = packageName;
assetsContext = getFontAssetsContext(appPackContext, packName);
assetManager = assetsContext.getAssets();
try {
files = assetManager.list(defPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (files.length > 0) {
for (int i = 0; i < files.length; i++) {
fontsItems = new FontsItems();
fontList.add(files[i]); // here you get the files which are in given path (You can filter this if need)
}
}
}
}
private Context getFontAssetsContext(Context c, String packName) {
try {
return c.createPackageContext(packName,
Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}
我已成功运行此代码,它对我很有用,希望这对您也有帮助。