Android
Förbättra Android-prestanda med hjälp av ikonteckensnitt
Sök…
Anmärkningar
Ikon Typsnitt är som vanliga typsnitt som har symboler istället för bokstäver. Det kan användas i din applikation på högsta möjliga sätt.
Dom är:
- Flexibel
- skalbar
- vektorer
- Snabbt bearbetbart
- Lättvikt
- Tillgänglig
Effekt på storlek
Exportera en bild i olika storlekar för Android-enheter skulle kosta din app, en ytterligare tillgångsstorlek på cirka 30 kB per bild. Att lägga till en teckensnittsfil (.ttf) med cirka 36 ikoner skulle kosta bara 9 kB. Föreställ dig fallet om du lägger till 36 enskilda filer med olika konfigurationer skulle det vara cirka 1000 kB. Det är en rimlig mängd utrymme som du sparar med ikonteckensnitt.
Begränsningar av ikonteckensnitt.
Ikonteckensnitt kan användas i navigeringslådan. Att använda dem i navigationsvyer som ikon för menyalternativ är inte möjligt eftersom menyfilen inte kan skapas utan att ange titeln. Så det är lämpligt att använda svg-filer som resurser för dessa ikoner.
Ikonsteckensnitt kan inte användas i flytande åtgärdsknapp. eftersom de inte har ett
setText()
.Externa teckensnitt kan inte tillämpas från xml. De måste anges med Java-filen. Eller annars behöver du utöka den grundläggande vyn och skapa en vy som anges i det här inlägget
Hur man integrerar ikonsteckensnitt
Följ stegen nedan för att använda ikonteckensnitt:
Lägg till teckensnittsfilen till ditt projekt
Du kan skapa din typsnittsikonfil från onlinewebbplatser , t.ex. icomoon , där du kan ladda upp SVG-filer med de nödvändiga ikonerna och sedan ladda ner det skapade ikonteckensnittet. Placera sedan .ttf- teckensnittsfilen i en mapp med namnen typsnitt (namnge den som du vill) i mappen för tillgångar:
Skapa en Helper Class
Skapa nu följande hjälparklass, så att du kan undvika att upprepa initialiseringskoden för teckensnittet:
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); } }
Du kan använda
Typeface
för att välja typsnitt från tillgångarna. På så sätt kan du ställa in typsnittet på olika vyer, till exempel till en knapp:Button button=(Button) findViewById(R.id.button); Typeface iconFont=FontManager.getTypeface(getApplicationContext()); button.setTypeface(iconFont);
Nu har knappsnittet ändrats till det nyskapade ikonteckensnittet.
Plocka upp de ikoner du vill ha
Öppna filen styles.css som är kopplad till ikonsteckensnittet. Där hittar du stilarna med Unicode-tecken på dina ikoner:
.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”; }
Den här resursfilen kommer att fungera som en ordlista som kartlägger Unicode-karaktären som är associerad med en specifik ikon till ett mänskligt läsbart namn. Skapa nu strängresurserna enligt följande:
<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>
Använd ikonerna i din kod
Nu kan du använda ditt teckensnitt i olika vyer, till exempel enligt följande:
button.setText(getString(R.string.icon_arrow_circle_left))
Du kan också skapa knapptextsvyer med hjälp av ikonteckensnitt:
TabLayout med ikonteckensnitt
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;
}
}
- I det här exemplet finns myfont.ttf i mappen Tillgångar. Skapa mapp för tillgångar
- I din aktivitetsklass
//..
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);
//..