HoloEverywhere 1.6.8

ロゴ

すべての均一性、または良い一日!

ここをざっと見て、habrはmcavalonのプロジェクトでConnecting Fontsの記事に出くわしましたが、何か面白いものを見つけようと思ったのですが...



だから、数分前(これらの行を書いている時点では、数時間ではなく、数分でした、女の子が私を制御不能にした)HoloEverywhere 1.6.8をリリースしました。このリリースの主な機能は、先進のFontLoaderと、 。



最初に古いFontLoaderを見て、彼が知っていた(または知らなかった)ことを見てみましょう。

// Regular font myFontRegular = HoloFont.makeFont(R.raw.font_regular); // Bold font myFontBold = HoloFont.makeFont(R.raw.font_bold); // Italic font myFontItalic = HoloFont.makeFont(R.raw.font_italic); // BoldItalic font myFontBoldItalic = HoloFont.makeFont(R.raw.font_bold_italic); // Super-puper merger myFont = HoloFont.makeFont(myFontRegular, myFontBold, myFontItalic, myFontBoldItalic); FontLoader.setDefaultFont(myFont);
      
      





...それだけです。 正直なところ、絶対に柔軟性がなく、追加のフォントはありませんが、ニクロムです。

(いいえ、FontLoader.apply(View、HoloFont)にはまだオプションがありましたが、平凡に機能していました)。



そして、新しいFontLoaderが提供する機能:





単一の要素にフォントを追加する


Alisson DepizolのフォントToscuchet CMを使用します。 さて、nefigなので、これをTrueTypeに変換します。 res / raw / toscuchet.ttfに置きます。



org.holoeverywhere.app.Applicationを拡張するMainApplicationを作成し、コードの静的ブロックを作成し(静的{}すなわち追加)(一般に、すべてのライブラリ設定は1か所でここで行うのが最適です)、瞑想します。

Sodzee RawFontオブジェクトとttfファイルへのリンク:

 public class MainApplication extends Application { private static final Font sToscuchet; static { sToscuchet = new RawFont(R.raw.toscuchet); } }
      
      





うーん、どういうわけか小さなコード。 しかし、KISSの原則はJavaには適用されないため、さらに2、3の不必要な行をだれかに非難します。

FontCollector型のオブジェクトも作成する必要があります。このオブジェクトは、多くの異なるフォントを1つの大きな従順なオブジェクトに収集します。

特定の1つのTextViewのみにフォントを設定するため、ToscuchetフォントをFontCollectorに追加し、標準のRobotoファミリを追加する必要があります。 同時に、新しいスタイルに関するメタ情報を提供します。 出来上がり:

 public class MainApplication extends Application { private static final Font sToscuchet; private static final FontCollector sDefaultFont; static { sToscuchet = new RawFont(R.raw.toscuchet); sToscuchet.setFontFamily("toscuchet"); sToscuchet.setFontStyle(FontLoader.TEXT_STYLE_NORMAL); sDefaultFont = new FontCollector(); sDefaultFont.register(sToscuchet); sDefaultFont.register(FontLoader.ROBOTO); FontLoader.setDefaultFont(sDefaultFont); } }
      
      





まあ、すでに文化的に、しかし、あなたはどこでそのような短いコードのブロックを見ましたか?

スーパーマークアップに移動して、Androidをハングアップします。fontFamily= "toscuchet-normal"を実行し、実行して、子供のように喜びます。



デフォルトのフォント


最も簡単な方法:FontLoader.setDefaultFont(sToscuchet)を呼び出します。 しかし同時に、太字や斜体のスタイルが必要な場合でも、フォントは一般的にどこでも同じです。 転がりません。

ここに小さな問題があります。FontCollectorは、fontFamilyパラメーターとfontStyleパラメーターのペアに基づいて目的のフォントを検索します。 フォントファミリは既に設定されています(sToscuchet.setFontFamily( "toscuchet");)。 もちろん、textViewStyleを再定義して、そこに目的のfontFamilyを指定することもできますが、そうですね。 FontCollector'yと言うだけです:彼女、または、おそらくfontFamilyの使用をやめますか?

  sDefaultFont = new FontCollector().allowAnyFontFamily();
      
      





まあ... android:fontFamilyをマークアップから削除し、プロジェクトをビルドして実行できます:



フォントのfontFamilyは無視されるようになりました。 追加の修飾子のないTextView(つまり、fontStyle = normal)はきれいです。

スタイル


複数のフォントスタイル(通常、太字、斜体)がある場合は、1つのフォントにアセンブルできます。 このようなもの:

 public class MainApplication extends Application { private static final Font sToscuchetRegular, sToscuchetBold, sToscuchetItalic; private static final FontCollector sToscuchet, sDefaultFont; static { sToscuchetRegular = new RawFont(R.raw.toscuchet_regular).setFontStyle(FontLoader.TEXT_STYLE_NORMAL); sToscuchetBold = new RawFont(R.raw.toscuchet_bold).setFontStyle(FontLoader.TEXT_STYLE_BOLD); sToscuchetItalic = new RawFont(R.raw.toscuchet_italic).setFontStyle(FontLoader.TEXT_STYLE_ITALIC); sToscuchet = new FontCollector().allowAnyFontFamily(); sToscuchet.setFontFamily("toscuchet"); sToscuchet.register(sToscuchetRegular).asDefaultFont(); sToscuchet.register(sToscuchetBold); sToscuchet.register(sToscuchetItalic); sDefaultFont = new FontCollector(); sDefaultFont.register(sToscuchet).asDefaultFont(); sDefaultFont.register(FontLoader.ROBOTO); FontLoader.setDefaultFont(sDefaultFont); } }
      
      





次に、asDefaultFont()の追加呼び出しが表示されました。これは、以前のフォントをデフォルトフォントにする必要があることを意味します。 適切なものが見つからない場合、この特定のフォントが使用されます。

なぜなら このフォントには太字と斜体はありませんが、例はありません:)



さて、このFontLoaderのようなものが私から出てきました。 ご質問がある場合は、お問い合わせください。 コメント、PM、またはメールで。



ああ、私はほとんど忘れていました。 デモのSliderでのナビゲーションについて大騒ぎしたため、デモアプリケーションのすべてのナビゲーションがSliderMenuの形式でSliderアドオンに移動されました。 そして、デモアプリケーションのメインアクティビティのコード(わずかに単純化)は、次のようになります。

 @Addons(Activity.ADDON_SLIDER) public class DemoActivity extends Activity { public AddonSliderA addonSlider() { return addon(AddonSlider.class); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final SliderMenu sliderMenu = addonSlider().obtainDefaultSliderMenu(); sliderMenu.add(R.string.demo, MainFragment.class, SliderMenu.BLUE); sliderMenu.add(R.string.settings, SettingsFragment.class, SliderMenu.GREEN); sliderMenu.add(R.string.other, OtherFragment.class, SliderMenu.ORANGE); sliderMenu.add(R.string.about, AboutFragment.class, SliderMenu.PURPLE); } }
      
      





かっこいい? ほとんど何もせずに、タブレットのサポートと通常のホーム/戻るボタンの処理を備えた、Navigation Drawerの優れた実装を取得します。 SliderMenuもカスタマイズします。





バージョン1.5.0以降の変更点のリスト:





プロジェクトリポジトリAPKデモアプリケーション



All Articles