android 仿ios字体
2014-03-19 13:20:24 luyuncsd123 阅读数 9729

http://wiki.etc.cmu.edu/unity3d/index.php/Unity_font_issue_on_iOS/Android#Edit_the_Font\




在iOS / Android的统一字体问题

内容

 隐藏 ]

字体为iOS / Android的

使用Visual Studio转换

的iOS / Android设备不支持动态字体,这意味着您无法调整字体的大小,样式在TextMesh组件或GUIText组件。相反,你需要在字体资产导入设置中设置这些值。如果你需要的变化具有不同的尺寸和颜色,你需要做的字体资产的另一个副本,并设置这些值。一个例子示于右侧。下面是你需要在统一的iOS / Android的使用字体的步骤:

  1. 进口字体资产,在这里你将决定哪些字体的风格需要进口(正常,粗体,斜体等)。
  2. 跳到[字体资产导入设置,更改字符Unicode的ASCII码,根据你所使用的编码。对于Unicode的字体,更多的细节将在下届会议上给出。设置字体大小字体颜色
  3. 字体拖到TextMeshGUIText组件。对于TextMesh,不要忘记拖动字体物质(你可以找到它的时候崩溃字体资产)为MeshRender
  4. TextMeshGUIText,设置字体大小0字体样式正常。字体大小和样式将字体资产来确定。
  5. 构建到您的设备,并享受:)

字体为亚洲字符

Cygwin的软件包

问题

在Unity3D的使用亚洲字符为iOS / Android的需要额外的努力。统一放在一个字体的每一个支持的字符为位图进行渲染,而iOS只有可达2048x2048支持(1024×1024的旧设备)的纹理。它工作正常,为西方语言,但对于亚洲语言,你可以想像有多少字符有多么小的每个字符将是适合在2048 * 2048的位图。从测试团队Locomobio,使用日文字体与级别设置2个普通的字符,字体的最大尺寸可以是44的iPhone 4S。并为iPhone 4,iPhone 3GS或Android设备我们拥有的最大大小是小于20。即使我们确定有大小44,字体纹理大小可以作为巨大的8.0MB,这是不能接受的iOS应用。你要额外的工作来减少设置字符的大小。

简单的解决方案

如果您使用的是日本和大部分的文字是假名或通用汉字,你是幸运的去与简单的解决方案。
如果您使用的是中国或日本先进的汉字,请直接跳到下一个部分的完整的解决方案。
对于简单的解决方案,有一个免费的选择的日文字符可以用统一资源商店的字体。
来吧下载该字体,并按照上一节的指示,你应该罚款。

完整的解决方案

如果你达到了这一部分,你需要切出你不需要在你自己的角色,
我们使用一个名为工具fontforge的。下面是招一个完整的步骤。

安装Cygwin和fontforge的

这部分是Windows用户而已,因为fontforge的需要在类Linux环境中运行。
对于其他用户,你可以找到的fontforge的网站说明安装您的版本。
有关完整说明,请参阅此页,我在这里复制它的步骤为了方便。

  1. 下载cygwin的安装。运行setup.exe,并首先选择你下载镜像。
  2. 然后选择要安装在Cygwin环境下有关的包,你将需要默认的东西,再加上X窗口系统,binutils的,的libpng,libjpeg的,和libxml2的。
  3. 下载fontforge的并解压文件(S)到里面的Cygwin环境中一种目录。例如:。C:\ cygwin的\首页\ fontforge的\
  4. 运行Cygwin的。
  5. 运行由fontforge的需要X Window系统。只要输入在Cygwin Bash的方式:$ startx
  6. 从解压后的文件夹中运行fontforge的:$运行的/ home / fontforge的/ fontforge.bat

编辑字体

首先得到一个字体。我们用M +日文字体。然后打开fontforge的字体,点击你不需要的字符右键,选择清晰。当你完成后,进入文件 - > 生成字体,然后选择TrueType字体来生成一个新的字体。现在,您可以导入新的字体到Unity。(请记住,在设置字符Unicode的进口设置)。
这是一个巨大的工作量所拿到手搭这些字符。在文件 - > 执行脚本,我们最多可以输入脚本来减轻我们的生活。
一个示例脚本如下,我们选择除“A”(0u61)每一个字符,并清除它们:

   选择无()

   SelectMore(0u61)

   SelectInvert()

   清除()

在下一节中,我们提供了一个简单的程序来读取一个文本文件,并生成选择未包含在该文件中,并清除它们的所有字符的脚本。所以,你只需要把你需要在游戏中以文本文件中使用,并执行脚本出来把该程序的所有字符。执行外部脚本,转到文件 - > 执行脚本 - > 通话

UnicodeFontHelper

这个计划是为团队Locomobio一个快速的解决方案。它的目的不是要成为一个完整的工具。请仔细阅读该代码,并确保您了解是怎么回事,和自定义版本。基本上你只需要去\ UnicodeFontHelper \ UnicodeFontHelper \ BIN \调试,把你的人物在Characters.txt,运行程序,它会输出FontCut.pe作为fontforge的脚本。

Unicode的字体助手项目


2016-05-06 15:52:04 u013022210 阅读数 5118

后来了解到的手机系统 ios、android 等是不支持微软雅黑字体,为了满足产品的需要,保证视觉稿的还原度,手机端是如何定义微软雅黑字体呢?

相信大家会想到 @font-face 定义为微软雅黑字体并存放到 web 服务器上,在需要使用时被自动下载

1
2
3
4
5
6
7
8
@font-face {
    font-family: 'MicrosoftYaHei';
    src: url('MicrosoftYaHei.eot'); /* IE9 Compat Modes */
    src: url('MicrosoftYaHei.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
             url('MicrosoftYaHei.woff') format('woff'), /* Modern Browsers */
             url('MicrosoftYaHei.ttf')  format('truetype'), /* Safari, Android, iOS */
             url('MicrosoftYaHei.svg#MicrosoftYaHei') format('svg'); /* Legacy iOS */
   }


雅黑字体问题虽然解决了,但也带来了影响,一来消耗用户的流量,二来对页面的打开速度造成了延迟。

总感觉不好,为了说服产品经理,找了三大手机系统的字体资料: 

ios 系统

  • 默认中文字体是Heiti SC
  • 默认英文字体是Helvetica
  • 默认数字字体是HelveticaNeue
  • 无微软雅黑字体

android 系统

  • 默认中文字体是Droidsansfallback
  • 默认英文和数字字体是Droid Sans
  • 无微软雅黑字体

winphone 系统

  • 默认中文字体是Dengxian(方正等线体)
  • 默认英文和数字字体是Segoe
  • 无微软雅黑字体

附:ios7字体列表

并做了个小测试,下图为测试机 iphone 4s、三星 GT-N7000 android 2.3.6、HTC windows Phone 8.0 三种手机中的默认中文字体和英文字体展现:

我们可以看出三种不同的中文字体和微软雅黑一样是无衬线字体,有无衬线只是一个小原因,而无论页面中使用哪种字体,肉眼很难看出它们的差异,对产品的体验几乎没有影响。

有关衬线字体和无衬线字体的差别,参考下图:

那么,使用系统默认的字体所达到的视觉效果跟使用微软雅黑字体没有明显的差别,权衡利弊,最终说服了产品经理放弃使用微软雅黑的想法。

结论

  • 各个手机系统有自己的默认字体,且都不支持微软雅黑
  • 如无特殊需求,手机端无需定义中文字体,使用系统默认
  • 英文字体和数字字体可使用 Helvetica ,三种系统都支持

代码:

1
2
/* 移动端定义字体的代码 */
body{font-family:Helvetica;}

  

ps:另外关于移动端的字体单位,rem是相当好用的,也给大家推荐一下,具体使用看这里:http://ued.taobao.org/blog/2013/05/rem-font-size/

2018-03-29 09:14:03 ccc905341846 阅读数 122

iPone通话时,退到后台的话,通知栏会有提示“正在通话,通话时长05:12”,感觉挺不错了,仿了一个

import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.TextView;

public class BreathTextView extends TextView{

	
	ValueAnimator animator;
	public BreathTextView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
	}
	public BreathTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		init();
	}

	public BreathTextView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		// TODO Auto-generated constructor stub
		init();
	}

	private void init(){
		animator=ObjectAnimator.ofInt(this,"textColor",0xFFFFFFFF,0x00FFFFFF);
		animator.setDuration(1000);
		animator.setEvaluator(new ArgbEvaluator());
		animator.setRepeatCount(ValueAnimator.INFINITE);
		animator.setRepeatMode(ValueAnimator.REVERSE);
	}
	@Override
	protected void onAttachedToWindow() {
		// TODO Auto-generated method stub
		super.onAttachedToWindow();
		animator.start();
	}
	@Override
	protected void onDetachedFromWindow() {
		// TODO Auto-generated method stub
		super.onDetachedFromWindow();
		animator.cancel();
	}
}

2016-12-20 10:37:23 u013424496 阅读数 4310

这段时间整个人都是处在一种颓废的状态,不想做任何事情,每天就是行尸般的上班,下班,然后在家玩游戏,状态是差的要死,脑子感觉就是一片混沌态,也不知道要写些啥了,真的是太可怕,为了防止延续,决定先写篇基础的东西压压惊吧,这样的状态真的不想再有了。希望以后也不要有了吧。

android系统自带的4种字体,通过 分别为android:typeface=:“normal”,“sans”, “serif”, “monospace",样式通过android:textStyle=""normal ,bold,italic ,这个对于老外的英文来说基本是可以用了,也不是很难看,可是用在了汉子的形式上,感觉是bold还是粗了些,所以我们还是有这个必要去实现下不同的字体,

1.准备工作

a.准备要实现字体模版

其实在实现这个字体的时候呢 ,首先你要有一个这中字体的模版,也就是.ttf格式的文件(这个项目中提供了两种字体,)通过下面的两个链接

http://download.csdn.net/detail/u010778159/8557559  华文黑体

http://download.csdn.net/detail/u013424496/9715596  平黑体

当然如果你是Windows 系统,可以在C:\Windows\Fonts找到,它本身就提供了很多字体文件,

样式 :显示前面的12,18应该就是px为单位的时候的字体样式

b.项目的准备

按照下面箭头步骤把上面现在的.ttf文件放到创建的文件夹下 ,创建的文件夹名字叫 assets ,不要写错奥

ok,准备好上面的步骤,你就准备好了一半了

2.自定义view ,拿到资源中的字体

TextView ,重新定义字体其实也就是使用了setTypeface()的方法,对于里面的参数的话就是上面第一步准备的字体了,通过

Typeface.createFromAsset(getContext().getAssets(), "STXINGKA.TTF")

拿到就OK啦,自定义的话可以通过如下方法,

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTypeface(Typeface.createFromAsset(getContext().getAssets(), "STXINGKA.TTF"));
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

然后在xml中使用

<pszhcom.custom.customtextstyle.MyTextView
        android:id="@+id/mytv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="50sp"
        android:textColor="#E12A54"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp"
        android:text="you !"/>

就OK了,

当然你也可以在activity中直接调用

((TextView)findViewById(R.id.tv)).setTypeface(Typeface.createFromAsset(MainActivity.this.getAssets(),"STXINGKA.TTF"));


OK了,在上一张效果图吧(有些骚气偷笑



最后的话,如果这中字体是大量使用的话,建议把

Typeface.createFromAsset(MainActivity.this.getAssets(),"STXINGKA.TTF")
最为一个变量放到 application里面









                            
2016-12-29 15:48:23 hechao3225 阅读数 1352

在Qt for Android开发中发现有些手机刷机后会出现字体不再是安卓默认字体DroidSansFallback,由于Qt开发的安卓应用会使用手机默认的字体,导致同一款APP现在不同手机上字体种类、大小等都不一致。因此产生统一字体,直接将字体文件加入到APP应用的想法。

该方案可以解决以下两种情况:

(1)Qt移植到移动端或嵌入式平台时出现中文乱码的情况;

(2)想把某种字体文件设置为Qt应用程序的默认字体。

以下方法本人在Qt for Android/IOS/ARM_Linux上均实测过,可以放心使用,故分享出来:

第一步:将字体文件加入到资源文件中(此处以安卓系统默认字体DroidSansFallback.ttf为例);

第二步:main.cpp中加入以下代码:

    //设置DroidSansFallback.ttf字体为程序默认字体,将字体文件打包进apk
    int fontId = QFontDatabase::addApplicationFont(":/demos/rssnews/content/font/DroidSansFallback.ttf");
    //将字体Id传给applicationFontFamilies,得到一个QStringList,其中的第一个元素为新添加字体的family
    QString androidFont = QFontDatabase::applicationFontFamilies(fontId).at(0);
    QFont font(androidFont);
    QGuiApplication::setFont(font);

其中addApplicationFont()中加入字体文件的路径,由于已作为资源文件加入到qrc,故以:/开头表示读取qrc下的路径。若使用后发现不能产生效果,很可能是此处路径没有设置正确。

没有更多推荐了,返回首页