Android 4.0上的自定義字型渲染(冰淇淋三明治)
在測試使用Helvetica Neue作為Android 4.0的主要字型的應用程式時,我發現與多種不同版本的Android相比,字型渲染方面存在不一致之處.我們在2.1,2.2.2,2.3.5,3.2,4.0和4.0.3上測試了這一點,每次都有相同的結果.我們也用不同的字型二進位制程式進行了這些測試,結果相同.
任何輸入或解決方法都不勝感激.
下面是一個示例應用程式的螢幕截圖,顯示不需要的結果,第一個是2.3.5,第二個是4.0.3.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setText("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); textView.setTypeface(Typeface.createFromAsset(getAssets(), "Helvetica Neue.ttf")); textView.setTextSize(9); setContentView(textView); }
雖然我們從未找到Helvetica渲染錯誤的解決方案,但是當我們向他們展示了Galaxy Nexus的錯誤後,我們可以說服客戶切換到Roboto.
更新:
public class TextViewCompat extends TextView { public TextViewCompat(Context context) { super(context); setup(context, null, 0); } public TextViewCompat(Context context, AttributeSet attrs) { super(context, attrs); setup(context, attrs, 0); } public TextViewCompat(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setup(context, attrs, defStyle); } private void setup(Context context, AttributeSet attrs, int defStyle) { setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); } }
http://stackoverflow.com/questions/9036184/custom-font-rendering-on-android-4-0-ice-cream-sandwich