Android
Улучшение производительности Android с помощью знаковых шрифтов
Поиск…
замечания
Значок Шрифты похожи на обычные типы шрифтов, которые имеют символы вместо букв. Он может быть использован в вашем приложении максимально легко.
Они есть:
- гибкий
- Масштабируемость
- векторы
- Быстрая обработка
- Легкий вес
- доступной
Влияние на размер
Экспортирование изображения в различных размерах для устройств Android будет стоить вашему приложению, размер дополнительных активов - около 30 КБ на изображение. При добавлении файла шрифта (.ttf) с примерно 36 значками будет стоить всего 9 КБ. Представьте себе случай, если вы добавите 36 отдельных файлов различных конфигураций, это будет около 1000 КБ. Это разумное пространство, которое вы сэкономите с помощью значков.
Ограничения иконок.
Значки шрифтов могут использоваться в навигационном ящике. Использование их в навигационных представлениях как значок пунктов меню невозможно, так как файл меню не может быть создан без указания заголовка. Поэтому рекомендуется использовать svg-файлы в качестве ресурсов для этих значков.
Символьные шрифты нельзя использовать в кнопке с плавающим действием. поскольку они не имеют атрибута
setText()
.Внешние шрифты нельзя применять из xml. Они должны быть указаны с использованием java-файла. Или вам нужно расширить основной вид и создать представление, указанное в этом сообщении
Как интегрировать знаковые шрифты
Чтобы использовать значки, выполните следующие действия:
Добавить файл шрифта в ваш проект
Вы можете создать файл значков шрифтов с интернет-сайтов, таких как icomoon , где вы можете загружать файлы SVG с необходимыми значками, а затем загружать созданный шрифт значка. Затем поместите файл шрифта .ttf в папку с именем fonts (укажите его как хотите) в папке с ресурсами:
Создание класса помощника
Теперь создайте следующий вспомогательный класс, чтобы избежать повторения кода инициализации шрифта:
public class FontManager { public static final String ROOT = "fonts/"; FONT_AWESOME = ROOT + "myfont.ttf"; public static Typeface getTypeface(Context context) { return Typeface.createFromAsset(context.getAssets(), FONT_AWESOME); } }
Вы можете использовать класс
Typeface
для выбора шрифта из активов. Таким образом, вы можете установить шрифт на различные виды, например, на кнопку:Button button=(Button) findViewById(R.id.button); Typeface iconFont=FontManager.getTypeface(getApplicationContext()); button.setTypeface(iconFont);
Теперь шрифт кнопки был изменен на вновь созданный шрифт значка.
Подберите значки, которые вы хотите
Откройте файл styles.css, прикрепленный к шрифту значка. Там вы найдете стили с символами Unicode ваших значков:
.icon-arrow-circle-down:before { content: “\e001”; } .icon-arrow-circle-left:before { content: “\e002”; } .icon-arrow-circle-o-down:before { content: “\e003”; } .icon-arrow-circle-o-left:before { content: “\e004”; }
Этот файл ресурсов будет служить в качестве словаря, который сопоставляет символ Юникода, связанный с определенным значком, с человекочитаемым именем. Теперь создайте строковые ресурсы следующим образом:
<resources> <! — Icon Fonts --> <string name=”icon_arrow_circle_down”> </string> <string name=”icon_arrow_circle_left”> </string> <string name=”icon_arrow_circle-o_down”> </string> <string name=”icon_arrow_circle_o_left”> </string> </resources>
Используйте значки в коде.
Теперь вы можете использовать свой шрифт в разных представлениях, например, следующим образом:
button.setText(getString(R.string.icon_arrow_circle_left))
Вы также можете создавать текстовые представления кнопок с помощью значков:
TabLayout с иконками шрифтов
public class TabAdapter extends FragmentPagerAdapter {
CustomTypefaceSpan fonte;
List<Fragment> fragments = new ArrayList<>(4);
private String[] icons = {"\ue001","\uE002","\uE003","\uE004"};
public TabAdapter(FragmentManager fm, CustomTypefaceSpan fonte) {
super(fm);
this.fonte = fonte
for (int i = 0; i < 4; i++){
fragments.add(MyFragment.newInstance());
}
}
public List<Fragment> getFragments() {
return fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
SpannableStringBuilder ss = new SpannableStringBuilder(icons[position]);
ss.setSpan(fonte,0,ss.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
ss.setSpan(new RelativeSizeSpan(1.5f),0,ss.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE );
return ss;
}
@Override
public int getCount() {
return 4;
}
}
- В этом примере myfont.ttf находится в папке «Активы». Создание папки с активами
- В вашем классе активности
//..
TabLayout tabs;
ViewPager tabs_pager;
public CustomTypefaceSpan fonte;
//..
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
fm = getSupportFragmentManager();
fonte = new CustomTypefaceSpan("icomoon",Typeface.createFromAsset(getAssets(),"myfont.ttf"));
this.tabs = ((TabLayout) hasViews.findViewById(R.id.tabs));
this.tabs_pager = ((ViewPager) hasViews.findViewById(R.id.tabs_pager));
//...
}
@Override
protected void onStart() {
super.onStart();
//..
tabs_pager.setAdapter(new TabAdapter(fm,fonte));
tabs.setupWithViewPager(tabs_pager);
//..