Android
Android-prestaties verbeteren met pictogramlettertypen
Zoeken…
Opmerkingen
Pictogramlettertypen zijn als normale lettertypen met symbolen in plaats van letters. Het kan hoogstens in uw toepassing worden gebruikt.
Zij zijn:
- Flexibel
- schaalbare
- vectoren
- Snel verwerkbaar
- Lichtgewicht
- Beschikbaar
Effect op grootte
Het exporteren van een afbeelding in verschillende formaten voor Android-apparaten kost uw app een extra activagrootte van ongeveer 30 kB per afbeelding. Terwijl het toevoegen van een lettertypebestand (.ttf) met ongeveer 36 pictogrammen slechts 9 kB kost. Stel je het geval voor als je 36 individuele bestanden van verschillende configuraties toevoegt, zou dit ongeveer 1000 kB zijn. Het is een redelijke hoeveelheid ruimte die u bespaart door pictogramlettertypen te gebruiken.
Beperkingen van pictogramlettertypen.
Pictogramlettertypen kunnen in de navigatielade worden gebruikt. Het is niet mogelijk om ze in navigatieweergaven als pictogram van menu-items te gebruiken, omdat het menubestand niet kan worden gemaakt zonder de titel op te geven. Het is dus raadzaam om svg-bestanden te gebruiken als bronnen voor deze pictogrammen.
Pictogramlettertypen kunnen niet worden gebruikt in zwevende actieknop. omdat ze geen kenmerk
setText()
hebben.Externe lettertypen kunnen niet worden toegepast vanuit xml. Ze moeten worden opgegeven met behulp van het Java-bestand. Of anders moet je de basisweergave uitbreiden en een weergave maken zoals gespecificeerd in dit bericht
Hoe Icon-lettertypen te integreren
Volg de onderstaande stappen om pictogramlettertypen te gebruiken:
Voeg het lettertypebestand toe aan uw project
U kunt uw lettertypepictogrambestand maken van online websites zoals icomoon , waar u SVG-bestanden van de vereiste pictogrammen kunt uploaden en vervolgens het gemaakte pictogramlettertype kunt downloaden. Plaats het .ttf- lettertypebestand vervolgens in een map met de naam lettertypen (noem het zoals u wilt) in de map activa:
Maak een helperklasse
Maak nu de volgende helperklasse, zodat u kunt voorkomen dat u de initialisatiecode voor het lettertype herhaalt:
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); } }
U kunt de klasse
Typeface
gebruiken om het lettertype uit de elementen te kiezen. Op deze manier kunt u het lettertype instellen op verschillende weergaven, bijvoorbeeld op een knop:Button button=(Button) findViewById(R.id.button); Typeface iconFont=FontManager.getTypeface(getApplicationContext()); button.setTypeface(iconFont);
Het lettertype van de knop is nu gewijzigd in het nieuw gemaakte lettertype.
Pak de gewenste pictogrammen op
Open het bestand styles.css dat aan het pictogramlettertype is gekoppeld. Daar vindt u de stijlen met Unicode-tekens van uw pictogrammen:
.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”; }
Dit bronbestand zal dienen als een woordenboek, dat het Unicode-teken geassocieerd met een specifiek pictogram toewijst aan een voor mensen leesbare naam. Maak nu de tekenreeksbronnen als volgt:
<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>
Gebruik de pictogrammen in uw code
Nu kunt u uw lettertype in verschillende weergaven gebruiken, bijvoorbeeld als volgt:
button.setText(getString(R.string.icon_arrow_circle_left))
U kunt ook knoptekstweergaven maken met pictogramlettertypen:
TabLayout met pictogramlettertypen
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;
}
}
- In dit voorbeeld bevindt myfont.ttf zich in de map Activa. Een map Activa maken
- In uw activiteitenklasse
//..
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);
//..