我如何获得 Android 已安装的系统字体列表并应用于自定义键盘
How i can get Android System fonts list that is already installed and apply to custom keyboard
我必须创建一个应用程序来检索预装 Android OS 的字体列表。我需要显示系统字体,并且可以 select 为我的应用程序设置该字体。
我的应用程序中有许多功能,我必须获取随机系统字体并将此字体样式应用到我的自定义软键盘。我如何将此字体应用到我的自定义软键盘上。
如何访问此字体并将其应用于我的应用程序?
字体是 class,它可以帮助您获得所有已安装字体的列表。然后你可以映射字体。这个 link 可以帮助解决这个问题:
文件管理器Class加载系统字体
public class FontManager {
// This function enumerates all fonts on Android system and returns the HashMap with the font
// absolute file name as key, and the font literal name (embedded into the font) as value.
static public HashMap< String, String > enumerateFonts()
{
String[] fontdirs = { "/system/fonts", "/system/font", "/data/fonts" };
HashMap< String, String > fonts = new HashMap< String, String >();
TTFAnalyzer analyzer = new TTFAnalyzer();
for ( String fontdir : fontdirs )
{
File dir = new File( fontdir );
if ( !dir.exists() )
continue;
File[] files = dir.listFiles();
if ( files == null )
continue;
for ( File file : files )
{
String fontname = analyzer.getTtfFontName( file.getAbsolutePath() );
if ( fontname != null ) {
// Log.d("fonts", fontname+" : "+file.getAbsolutePath());
fonts.put(file.getAbsolutePath(), fontname);
}
}
}
return fonts.isEmpty() ? null : fonts;
}
字体详细模型Class:
public class FontDetail
{
String sFontNames;
String sFontPaths;
String sFontType;
public FontDetail(String sFontNames, String sFontPaths, String sFontType)
{
this.sFontNames = sFontNames;
this.sFontPaths = sFontPaths;
this.sFontType = sFontType;
}
public String getsFontNames()
{
return sFontNames;
}
public void setsFontNames(String sFontNames)
{
this.sFontNames = sFontNames;
}
public String getsFontPaths()
{
return sFontPaths;
}
public void setsFontPaths(String sFontPaths)
{
this.sFontPaths = sFontPaths;
}
public String getsFontType()
{
return sFontType;
}
public void setsFontType(String sFontType) {
this.sFontType = sFontType;
}
}
保存字体列表的数组列表:
ArrayList<FontDetail> arrLstFontDetail = new ArrayList<FontDetail>();
在 arrLstFontDetails 中加载系统字体:
public void loadSystemFontsToListView() {
try {
Iterator<?> iter = FontManager.enumerateFonts().entrySet().iterator();
while (iter.hasNext()) {
@SuppressWarnings("rawtypes")
Map.Entry mEntry = (Map.Entry) iter.next();
LogMaintain.ShowLog(LogMaintain.LogType.Error, "System : " + (String) mEntry.getValue() + "Key: " + (String) mEntry.getKey());
arrLstFontDetail.add(new FontDetail((String) mEntry.getValue(), (String) mEntry.getKey(), "System"));
}
}
How to retrieve a list of available/installed fonts in android?
从上面的原始问题我得到了答案,但我正在用我真正想做的事情来扩展我的答案。我们如何在我们的应用程序中访问这些字体。
我们可以使用这个函数从路径访问系统(Typeface.createFromFile("your file")
String path = "/system/fonts";
File file = new File(path);
File ff[] = file.listFiles();
for(int i = 0 ; i < ff.length ; i++){
fontName.setText(file.getName());
fontName.setTypeface(Typeface.createFromFile(ff[i]));
}
我必须创建一个应用程序来检索预装 Android OS 的字体列表。我需要显示系统字体,并且可以 select 为我的应用程序设置该字体。
我的应用程序中有许多功能,我必须获取随机系统字体并将此字体样式应用到我的自定义软键盘。我如何将此字体应用到我的自定义软键盘上。
如何访问此字体并将其应用于我的应用程序?
字体是 class,它可以帮助您获得所有已安装字体的列表。然后你可以映射字体。这个 link 可以帮助解决这个问题:
文件管理器Class加载系统字体
public class FontManager {
// This function enumerates all fonts on Android system and returns the HashMap with the font
// absolute file name as key, and the font literal name (embedded into the font) as value.
static public HashMap< String, String > enumerateFonts()
{
String[] fontdirs = { "/system/fonts", "/system/font", "/data/fonts" };
HashMap< String, String > fonts = new HashMap< String, String >();
TTFAnalyzer analyzer = new TTFAnalyzer();
for ( String fontdir : fontdirs )
{
File dir = new File( fontdir );
if ( !dir.exists() )
continue;
File[] files = dir.listFiles();
if ( files == null )
continue;
for ( File file : files )
{
String fontname = analyzer.getTtfFontName( file.getAbsolutePath() );
if ( fontname != null ) {
// Log.d("fonts", fontname+" : "+file.getAbsolutePath());
fonts.put(file.getAbsolutePath(), fontname);
}
}
}
return fonts.isEmpty() ? null : fonts;
}
字体详细模型Class:
public class FontDetail
{
String sFontNames;
String sFontPaths;
String sFontType;
public FontDetail(String sFontNames, String sFontPaths, String sFontType)
{
this.sFontNames = sFontNames;
this.sFontPaths = sFontPaths;
this.sFontType = sFontType;
}
public String getsFontNames()
{
return sFontNames;
}
public void setsFontNames(String sFontNames)
{
this.sFontNames = sFontNames;
}
public String getsFontPaths()
{
return sFontPaths;
}
public void setsFontPaths(String sFontPaths)
{
this.sFontPaths = sFontPaths;
}
public String getsFontType()
{
return sFontType;
}
public void setsFontType(String sFontType) {
this.sFontType = sFontType;
}
}
保存字体列表的数组列表:
ArrayList<FontDetail> arrLstFontDetail = new ArrayList<FontDetail>();
在 arrLstFontDetails 中加载系统字体:
public void loadSystemFontsToListView() {
try {
Iterator<?> iter = FontManager.enumerateFonts().entrySet().iterator();
while (iter.hasNext()) {
@SuppressWarnings("rawtypes")
Map.Entry mEntry = (Map.Entry) iter.next();
LogMaintain.ShowLog(LogMaintain.LogType.Error, "System : " + (String) mEntry.getValue() + "Key: " + (String) mEntry.getKey());
arrLstFontDetail.add(new FontDetail((String) mEntry.getValue(), (String) mEntry.getKey(), "System"));
}
}
How to retrieve a list of available/installed fonts in android?
从上面的原始问题我得到了答案,但我正在用我真正想做的事情来扩展我的答案。我们如何在我们的应用程序中访问这些字体。
我们可以使用这个函数从路径访问系统(Typeface.createFromFile("your file")
String path = "/system/fonts";
File file = new File(path);
File ff[] = file.listFiles();
for(int i = 0 ; i < ff.length ; i++){
fontName.setText(file.getName());
fontName.setTypeface(Typeface.createFromFile(ff[i]));
}