Hatena::ブログ(Diary)

superdry memorandum :-D

20120117

[]ギャラリーからpicasa画像を共有で取得できるuriの変遷 13:04

メモ。詳しい方フォローください。個人的には3.x→4.xの変更はちょっとぐぬぬです。

  • Android 3.x
    • mimetype="image/*" で、picasa画像のGalleryProviderでの場所のuriが返ってくる
    • content://com.android.gallery3d.provider/picasa/item/*****

20111202

Google Web Fonts APIAndroidでつかってみる 23:55

本エントリは、「Android Advent Calendar*1」という企画の1エントリにもなっています。他にも色々楽しいエントリが上がる予定なのでこちらの方もチェックしてみてください☆

Google Web Fonts APIってなに?

Google Web Fontsとは、Googleが提供するWeb Fontのホスティングサービスです。本日時点で、欧文フォントで302字体あります。ざっとこんな感じ。こんな種類の多いのでAndroidでも使ってみたくなってきますよね。

f:id:Superdry:20111201004644p:image:w600

Androidで使ってみる。

Google Web Fonts は Android 2.2 以上対応となっています。通信が発生するのでパーミッションも必要です。AndroidManifest.xmlに追加します。

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET" />

WebViewに表示させます。WebViewのレイアウトレイアウトファイルmain.xmlに追加します。

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </WebView>

Google Web FontsはHTML内で以下のように指定することで使用できます。HEADタグの中がGoogle Web Fonts APIを使う為に必要です。装飾したい文字(INPUT_TEXT)を指定されたフォント(CSS_FONTTYPE)、指定されたサイズ(FONT_SIZE)で装飾します。大文字のところが任意で指定する部分です。

<html>
    <head>
        <link href='http://fonts.googleapis.com/css?family=FONT_TYPE' rel='stylesheet' type='text/css'>
        <style>body {color:#000;font-family: 'CSS_FONTTYPE', serif;font-size: FONT_SIZE;}</style>
    </head>
    <body>
        <p>INPUT_TEXT</p>
    </body>
</html>

このようなHTMLソースをロードするには、

があります。今回は汎用性を考えて後者で実装します。ベースとなるHTMLソースをStringで定義しておき、指定箇所を置換します。

    private static final String FONT_BASEURL = "<html><head><link href='http://fonts.googleapis.com/css"
            + "?family=FONT_TYPE' rel='stylesheet' type='text/css'>"
            + "<style>body {color:#000;font-family: 'CSS_FONTTYPE', serif;font-size: FONT_SIZE;}</style>"
            + "</head><body><p>INPUT_TEXT</p></body></html>";

    private String fontType = "Ribeye Marrow";
    private String fontSize = "48px";
    private String inputText = "Shall we use Google Web Fonts API?";

「Ribeye Marrow」というフォントを使いたい場合には、linkタグの中では「Ribeye Marrow」と定義すればいいのですが、cssの中では「Ribeye+Marrow」とする必要があります。これを考慮して置換メソッドを用意し実装します。

    // 置換処理
    private String createUrl() {
        String output = FONT_BASEURL.replace("FONT_TYPE",fontType.replace(' ', '+'))
            .replace("CSS_FONTTYPE", fontType)
            .replace("FONT_SIZE", fontSize)
            .replace("INPUT_TEXT", inputText);
        return output;
    }

そしてこのデータをWebViewにロードします。

        WebView webview = (WebView) findViewById(R.id.webview);
        webview.setBackgroundColor(Color.TRANSPARENT);
        webview.loadDataWithBaseURL(null, createUrl(), "text/html", "utf-8", null);

実行するとWeb Fontが表示されました!

f:id:Superdry:20111201021418p:image:w200


フォント一覧の取得方法

Web Fontの表示だけならAPI_KEYもいらないのですが、一覧を取得する際には必要となります。RESTFulなので、以下URLでリクエストするとJSONでレスポンスが返ってきます。

https://www.googleapis.com/webfonts/v1/webfonts?key=YOUR-API-KEY

JSONの構造はこんな感じです。

{
 "kind": "webfonts#webfontList",
 "items": [

  [...]

  {
   "kind": "webfonts#webfont",
   "family": "Anonymous Pro",
   "variants": [
    "regular",
    "italic",
    "bold",
    "bolditalic"
   ],
   "subsets": [
    "cyrillic",
    "cyrillic-ext",
    "greek",
    "greek-ext",
    "latin",
    "latin-ext"
   ]
  },
  {
   "kind": "webfonts#webfont",
   "family": "Anton",
   "variants": [
    "regular"
   ],
   "subsets": [
    "latin",
    "latin-ext"
   ]
  },

  [...]

 ]
}

これをごりごりパースします。JsonPullParserとか使うと幸せになれるかもしれません。

API KEYの取得方法

API KEYを取得してない人のために取得方法も残しておきます。

f:id:Superdry:20111201031937p:image:w360

  • プロジェクトのサービス一覧が表示されるので下のほうの「Web Fonts Developer API」をONに。ちなみにここに利用制限が書いており、Web Fonts Developer APIの場合は1日10000クエリ

f:id:Superdry:20111201034042p:image:w480

f:id:Superdry:20111201031938p:image:w480

メリットとデメリット

Androidでは普通アプリでシステムフォントと別のフォントを使いたい場合、assetsフォルダ配下におくのが定石です。しかしフォントを組み込むと、どうしてもアプリの容量が大きくなってしまいます。一般的に、アプリは5MBを超えると、ユーザはストレスを感じるといわれてます。そのためデベロッパーは、容量を犠牲にして美麗なアプリにするよりも、容量が大きくなることを避けがちな傾向にあります。

しかし、その点、Web Fontsだとアプリが軽量ですみます。ただデメリットとしては、通信が必要でローディングに少し時間はかかることがあげられます。またWebViewかブラウザでしか使用できません。メリット/デメリットに応じて使い分けてください。

最後に

今回初心者向けの内容になってますが、Google Web Fonts APIをいろんなところで積極的に使っていただきたくて、あえて書きました。個人的な意見ですが、Androidアプリはもっときれいで心地よいものになる余地が残されていると思います。

ていうか、もっと使おうぜ!チープだけどViewerアプリ作ったからさ!(ダウンロードはコチラ)これで電車の中でもAndroid端末からFont眺めてアプリの構想練れるぜ!作りが粗いのは勘弁してください時間がなかったんだもん。

サンプル

今回のサンプルソースを全文掲載しておきます。

続きを読む

*1:Advent Calendarについてはココ参照。

kanzmrswkanzmrsw 2011/12/02 00:43 固定文のみで使うなら&text= inputTextとしてみるのもいいかもしれない!です!

20111124

[]MecabJavaバインディング 14:56

注意)今回のpostはめずらしくAndroidはぜんっぜん関係ありません。また自分用メモとして残しただけなので間違いがあってもご容赦願います。

日本語形態素解析ライブラリを使おうと思い立ちました。Java形態素解析するにはSenやGoSen、lgoなどがあるようですが、まずはMecabを使ってみるということで。mecab-0.98.tar.gzをダウンロード

Mecabインストールはこの辺を参考にしました。

Mecabの辞書作成はこの辺。

私はJavaが一番使い慣れてるので、Javaバインディングすることに。でもオフィシャルではぜんっぜん詳しく書いてません。まずはここでmecab-java-0.97.tar.gzをダウンロードします。

mecab-java-0.97.tar.gzを解凍し、makeしてやるとjavaバインディングに必要なファイルが作成できます。私の環境(Mac OS X(Lion))では、Makefileを以下の赤字のように書き換えるとmakeがうまく行きました。環境に応じて変えてやってください。

TARGET=MeCab
JAVAC=javac
JAVA=java
JAR=jar
CXX=c++
INCLUDE=/System/Library/Frameworks/JavaVM.framework/Headers

PACKAGE=org/chasen/mecab

LIBS=`mecab-config --libs`
INC=`mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE)/linux

all:
        $(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx  $(INC)
        $(CXX) -shared  $(TARGET)_wrap.o -o lib$(TARGET).so $(LIBS)
        $(JAVAC) $(PACKAGE)/*.java -J-Dfile.encoding=UTF8
        $(JAVAC) test.java -J-Dfile.encoding=UTF8
        $(JAR) cfv $(TARGET).jar $(PACKAGE)/*.class -J-Dfile.encoding=UTF8

test:
        env LD_LIBRARY_PATH=. $(JAVA) test

clean:
        rm -fr *.jar *.o *.so *.class $(PACKAGE)/*.class

cleanall:
        rm -fr $(TARGET).java *.cxx

これでmakeすると、新規に2つのファイルが作成されます。

Eclipseで実行する時はJavaプロジェクトを作成しMeCab.jarを外部ライブラリとして追加します。そして、mecab-java-097フォルダ内のtest.javaEclipseを取り込み、以下のように書き換えます。

File f = new File("/Users/hogehoge/mecab-java-097/libMeCab.so");
System.load(f.toString());

これで、ライブラリがロードでき、実行できます。

20111012

[]企業別UX&UIガイドラインのまとめ 12:37

下記ブログ記事の内容をそのまま転載します。長くて見づらかったのでコンパクトにした。

Adobe

Apple

Blackberry

Google

HP

IBM

Microsoft

Motolora

Nokia

Oracle

Samsung

SAP

Sony Ericsson

20111004

[]フリーなAndroid UI ライブラリについて 18:47

めも。Green Droidは昔から有名でよく使っていたのですが、最近結構増えてました。