【Android】文字の一部を装飾する

■ 文字の一部を小さくする

※R.id.testにはHello world!が設定されています。

SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
TextView testTextView = (TextView) findViewById(R.id.test);
String testText = (String) testTextView.getText();
spannableStringBuilder.append(testText);
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.5f);
spannableStringBuilder.setSpan(
       relativeSizeSpan,
       testText.indexOf("world") - 1,
       testText.indexOf("world") - 1 + "world".length(),
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
   );
testTextView.setText(spannableStringBuilder);

■ 文字の一部を大きくする

SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
TextView testTextView = (TextView) findViewById(R.id.test);
String testText = (String) testTextView.getText();
spannableStringBuilder.append(testText);
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(1.5f);
spannableStringBuilder.setSpan(
        relativeSizeSpan,
        testText.indexOf("world") - 1,
        testText.indexOf("world") - 1 + "world".length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
    );
testTextView.setText(spannableStringBuilder);

■ 文字の一部にstyleを適用する

SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
TextView testTextView = (TextView) findViewById(R.id.test);
String testText = (String) testTextView.getText();
spannableStringBuilder.append(testText);
TextAppearanceSpan boldTextAppearanceSpan = new TextAppearanceSpan(this, R.style.BoldTextAppearance);
spannableStringBuilder.setSpan(
        boldTextAppearanceSpan,
        testText.indexOf("world") - 1,
        testText.indexOf("world") + "world".length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
   );
testTextView.setText(spannableStringBuilder);

■ リンクっぽくする

※この場合だけsetMovementMethodが必要。

TextView testTextView = (TextView) findViewById(R.id.test);
String testText = (String) testTextView.getText();
spannableStringBuilder.append(testText);
spannableStringBuilder.setSpan(
        new ClickableSpan() {
        @Override
        public void onClick(View widget) {
                System.out.println("clicked!");
        }
        },
        testText.indexOf("world") - 1,
        testText.indexOf("world") + "world".length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
   );
testTextView.setText(spannableStringBuilder);
testTextView.setMovementMethod(LinkMovementMethod.getInstance());


クリックした感じにしたい場合

    <TextView
        android:id="@+id/testTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textColorHighlight="@drawable/selector_clickable_text_color_highlight"
        android:textColorLink="@drawable/selector_clickable_text_color_link" />

のようにandroid:textColorHighlightとandroid:textColorLinkで調整できる。

・selector_clickable_text_color_link.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="#1111cc" />
    <item android:state_focused="true" android:state_pressed="true" android:color="#FF8C00" />
    <item android:state_focused="false" android:state_pressed="true" android:color="#FF8C00" />
    <item android:color="#1111cc" />
</selector>

・selector_clickable_text_color_highlight.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="@android:color/transparent" />
    <item android:state_focused="true" android:state_pressed="true" android:color="@android:color/transparent" />
    <item android:state_focused="false" android:state_pressed="true" android:color="@android:color/transparent" />
    <item android:color="@android:color/transparent" />
</selector>


※複数のSpanを一つのテキストに設定する場合、setSpanを重ねていけばオッケー。


【Android】画面表示時にEditTextにフォーカスさせない

EditTextより前にTextView等があれば、そのViewに対して以下の設定をすればEditTextにフォーカスあたらなくなる。

 

            android:focusable="true"

            android:focusableInTouchMode="true"

 

【Android】Bluetooth SPP による無線通信

こちらを参考にさせて頂きました。

http://www.bright-sys.co.jp/blog/android-using-bluetooth-spp/

 

めっちゃはまったポイントが・・・これ。

 

SPP による通信をおこなう場合は、UUID に 00001101-0000-1000-8000-00805F9B34FB を指定する必要があります。

 

自分で勝手にUUIDを発行していたので、サーバ側でソケットが開けない。ってIOExceptionが発生。上記UUIDにすることであっさり解決しました。

【Android】4.4(KitKat)のWebViewでクラッシュ

同じ人がいました。

https://code.google.com/p/android/issues/detail?id=62128

html側でドロップダウンを使っていると、それを表示させようとすると落ちます。

相変わらず残念すぎる。

【Java】Simple-xmlのstrict

simple-xml(http://simple.sourceforge.net/home.php)でxmlの入れ物となるエンティティのRootアノテーションには

strict=false

をつけた方がよい。

デフォルトtrueになっているが、trueの場合xmlの要素とエンティティのフィールドが完全に一致する必要がある。

xml

<hoge>

 <fuga>fugafuga</fuga>

</hoge>

から

<hoge>

 <fuga>fugafuga</fuga>

 <moge>moge</moge>

</hoge>

と要素が増えただけでElementExceptionが発生する。

strict=falseに設定しておけば、要素が増えても例外は発生しない。

【Android】外部メディア (SDcard) へのインストール指定

Android 2.2  から、アプリケーションのインストール場所が指定できます。

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    android:installLocation="auto"

...

 

指定可能な値とその内容は以下の通り。

  • internalOnly→内部メモリのみ
  • preferExternal→外部メディア(SDCard)優先
  • auto→自動

※外部メディアにインストールすると端末によってはホーム画面のショートカットが再起動の度に消える等のアプリの不具合と思われる挙動をしてしまいます。

できるだけautoにするのが良いと思われる。

 

2.2以下でも以下の方法で指定可能です。

 

 1 android:installLocation に"auto" or"preferExternal" 設定

 2. アプリケーションをコンパイルするときにminSdkVersionを 

  API Level 8以上 にする。8 よりも古い Android 

  ライブラリが android:installLocation を設定できないので。

 

※minSdkVersionを8に設定しても実際には8より小さいため、リリース前に6にして使うことができないAPIを使っていないか確認した方がよい。

 

 

Improved App Insight by Linking Google Analytics with Google Play 翻訳

原文はコチラ

ヘルプ:https://support.google.com/analytics/answer/2956981

 

アプリをより成長させる重要な要素として、あなたのユーザについてより理解することが大切です。あなたのアプリをどうやって見つけるのか?ユーザが使っているデバイスは何か?あなたのアプリを使っている時にユーザは何をするのか?そして、どの程度利用しているのか?

Google AnalyticsGoogle Play Developer Consoleの新たな統合により簡単に理解するこができるようになりました。

 

今日から、Google AnalyticsアカウントとGoogle Play Developer Consoleを連携することができ、新しい強力な分析が可能となります。Google Analyticsではどのキャンペーンが最も参照、インストールされているかのハイライトレポートを見ることができ、Developer ConsoleではAnalyticsのデータを元に新しいアプリのステータスを見ることができる。

 

このデータはあなたのアプリを次のレベルに成長させる手助けとなります。あなたが複数のキャンペーンや収益広告を使用している場合は特に。Google AnalyticsとDeveloper Consoleを連携させるのは簡単です。以下のセクションでは、新しいデータのタイプと連携手順を説明します。

 

 Google AnalyticsでアプリのGoogle Play referral flow を見る

 

Google AnalyticsのアカウントとGoogle Play Developer Consoleを一度連携させると、Google Play Referral Flow がGoogle Analyticsの新しいレポートとして見ることができます。このレポートはキャンペーンやトラフィックの詳細です。それぞれのキャンペーンは、どの位のユーザがGoogle Playのリストページを見たか、アプリをインストールして、最終的に彼らのモバイルデバイスでどの程度起動したか。

 

このデータでキャンペーンがどの位広範囲に効果があるのか分析することができます。ブログ、ニュース記事、広告等どのようなマーケティングが最も効果があるかを分析できます。Google Analyticsで Acquisitions > Google Play > Referral Flow をクリックすればGoogle Playのレポートを見つけることができます。

 

 

In the Developer Console, see engagement data from Google Analytics

 

 既にGoogle Analyticsを使用しているのであれば、ユーザがあなたのアプリにもたらす相互作用がどれ程重要かを知っているはずです。どの程度アプリを起動しているか?それでいくらするのか?アプリで何をしているのか?

 

一度Google Analyticsのアカウントを連携すれば、あなたのアプリに関係するGoogle AnalyticsのデータをDeveloper ConsoleのStatistics pageから見ることができます。トップページのドロップダウンメニューから二つの新しい計測結果を見ることができます。

  • Active users:一日にアプリを起動した人数
  • New users:アプリを初めて起動した人数

これらの関係した計測結果はあなたの他のアプリの統計と統合され、他の軸と組み合わせて分析することができます。国、言語、デバイス、Androidバージョン、アプリバージョン、キャリア。

 

 How to get started

 

まず、あなたのアプリにGoogle Analyticsを組み込む必要があります。組み込んでいない場合、download the Google Analytics SDKからAndroid用のSDKをダウンロードし、開発者向けドキュメントを読んで、Google Analyticsの組み込み方を習得して下さい。アプリにGoogle Analyticsを組み込み後、Developer Consoleでアプリをアップロードして下さい。

 

次に、Developer ConsoleとGoogle Analyticsを連携する必要があるので、Developer Consoleで対象のアプリを選択して下さい。Statistics pageの下に連携する方法が記載されています。これには少し時間が必要です。

 

これでGoogle AnalyticsGoogle Play Referral Flow レポートと新しい軸での分析をDeveloper Consoleで見ることができます。