19

我有一个应用程序,其最低 API 级别为 14。我认为所有兼容设备都应该默认安装 Roboto 字体是否正确?如果我将 textView 字体设置为 Roboto 或 Roboto Light,它似乎默认为普通的 sans 字体。

有没有办法在不包含 Roboto 字体作为资产的情况下使用 Roboto?

4

1 回答 1

58

有没有办法在不包含 Roboto 字体作为资产的情况下使用 Roboto?

不,对于 API 11<,没有其他方法可以做到这一点。

我通常为 Robot 字体创建一个自定义 TextView:

public class TextView_Roboto extends TextView {

        public TextView_Roboto(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
                createFont();
        }

        public TextView_Roboto(Context context, AttributeSet attrs) {
                super(context, attrs);
                createFont();
        }

        public TextView_Roboto(Context context) {
                super(context);
                createFont();
        }

        public void createFont() {
                Typeface font = Typeface.createFromAsset(getContext().getAssets(), "robo_font.ttf");
                setTypeface(font);
        }
}

现在您可以像这样在布局中使用它:

<com.my.package.TextView_Roboto>
  android:layout_width="..."
  android:layout_height="..."
  [...]
</com.my.package.TextView_Roboto>

当然你可以创建一个 TextView 布局。一个用于 Pre HC,一个用于 HC 及更高版本(您必须使用 layout 和 layout-v11 文件夹)。现在您可以使用<include>标签将 TextView 包含在您的布局中。你只需要这样做然后使用这个:

if (android.os.Build.VERSION.SDK_INT >= 11){
    TextView txt = (TextView) findViewById(R.id.myTxtView);
}
else{
    TextView_Roboto txt = (TextView_Roboto) findViewById(R.id.myTxtView);
}

编辑:

您可以像这样从 Android 4.1+ 本地使用 Roboto:

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
于 2013-01-31T18:53:33.157 回答