doubleの値を、カンマつきの文字列に変換
1234567(double) を
1,234,567(String) に変換します。
double value = 1234567d; DecimalFormat df = new DecimalFormat("#,##0.###"); String string = df.format(value);
コンストラクターのパラメーターはフォーマットのルールの定義のようなもので
0 は、値が無くても0を表示する
# は、値が0以外なら表示、0なら何も表示しない
上記の例なら小数点以下第3位までを表示し、整数の部分は3桁おきにカンマが入ります。
でも小数点以下は3桁までしか表示されないのに、整数は"1,234,567"のように、4桁で縛られることはなく、
カンマも入れてくれています。ここらへんがいまいち分かってないです・・・
電卓などの計算結果を表示するときに、手動でカンマを、
小数点の位置から、無ければ右端から3桁おきに","を挿入、先頭と"-"記号の右には入れない、
というふうにしていたので、かなり便利なクラスです!笑
独自に用意したフォントを使う
開発していると、デフォルトのフォントで日本語を表示すると、
なんかオシャレ感に欠ける・・・ということがあります。
シンプルな概観や、洗練された印象を与えるには、フォントの効果は少なからずあるかと思います。
以下、自分で用意したフォントをアプリに組み込む方法です。
フォントを用意する
Android Studioの左側のエクスプローラー風のビューから、mainフォルダを選択し、右クリック → New → Directory を選び「assets」という名前のフォルダを作成。
mainフォルダが見当たらないときは、表示をProject表示に切り替えてみてください。
その中に、フォントファイルを入れる。
Roboto-Light.ttfというフォントを入れました。マテリアルデザイン推奨のフォントです。
以下のリンクからダウンロードできます。
Roboto & Noto fonts - Resources - Material design guidelines
コードから利用する
Typeface tf = Typeface.createFromAsset(getAssets(),"Roboto-Light.ttf"); // フォントのファイル名を拡張子まで全て入れます。 yourTextView.setTypeface(tf);
setTypefaceメソッドが使えるビューや、Paintに渡してキャンバス内の描画にも利用できます。
フォントによっては、商業利用ができないものもありますので、フォントの利用規約を必ずお読みください。
小数点以下第n位にdoubleを丸める
例えば電卓アプリなどで計算結果を表示する際、
割り切れない数値を、小数点以下第○位まで丸めて表示する方法です。
例として、10÷6の結果を、小数点以下第4位を四捨五入して、第三位まで表示してみます。
double value = 10d / 6d; BigDecimal bd = new BigDecimal(value);
パラメーターとしてvalueを与えてBigDecimalのインスタンスを作成します。
valueの値は、1.6666666666666667になっています。
bdの値は、1.6666666666666667406815349750104360282421112060546875となっています。
(↑ここらへんはどういう仕組みでそうなるのか分かりませんが、コンピューター的な現象なのでしょう笑)
小数点以下3位に四捨五入して丸めます。
BigDecimal bigDecimal = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
String string = bigDecimal.toString();
新たにBigDecimal型の変数を用意して、先ほどのBigDecimalのsetScaleメソッドで目的の値を格納します。
setScale( 第何位まで , 端数処理の方法)
BigDecimalクラスのtoString()メソッドで、文字列を取得します。
文字列 "1.667" が取得できました。
日常的な電卓としては、とても見やすい表示になりました!
端数処理方法の定数は、他にもいろいろありますが、電卓で使うのは以下のあたりでしょうか。
ROUND_DOWN (切捨て)
ROUND_UP (切り上げ)
BigDecimalクラスを使うと、計算の精度は上がりますが、パフォーマンスは低下するそうです。
「友達に紹介する」機能を実装する
個人でアプリを開発している場合、
なかなかユーザー数が増えないのが悩みのタネです。
インパクトのあるゲームなら、ツイッターによる拡散やユーチューバーが紹介したりすると、
爆発的にダウンロードが増えたりもしますが、
堅実なツール系のアプリだと、そのような奇跡はなかなか起こりません(笑)
せめて、気に入ってくれたらお友達に紹介してくれたりすると、
多少はダウンロードしていただけるのでは、と思い、
「友達に紹介する」ボタンを実装してみました。
他のアプリに、文字列を渡すためのコード
Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, "キャッチ文" + "\n https://play.google.com/store/apps/〇〇〇〇"); startActivity(intent);
Intent.ACTION_SENDを指定すると、他のアプリに文字列を渡します。
setType("text/plain")では、文字列のデータを指定しています。
画像も渡すことができるので、おしゃれなUIだったら使いたいところです。
putExtra()の第2引数で、要となるテキストを指定します。
例では、キャッチ文と、改行のあとにグーグルプレイのアドレスを載せています。
(改行は、文字列内の改行したいところに \n を挿入します)
最後にstartActivity(intent)で、あとはよろしく~といった具合に丸投げして完了です!
Intent.ACTION_SENDにより、
例えばメールアプリが選択されたときは、本文に上記の、
キャッチ文
https://play.google.com/store/apps/〇〇〇〇
が入力された状態で、件名・宛先は未入力の状態でユーザーに向けて開かれます。
試しに自分宛にメール送信してみたところ、アドレスの所はリンクテキストに自動的に変わるので、
要件はクリアできているかと思います。
グーグルプレイのアプリ詳細ページに移動するコードです。
合わせて実装したい、「ご意見、ご感想」などに適したインテントです。
プレイストアのアプリ紹介ページへジャンプします。
Uri uri = Uri.parse("market://details?id=パッケージ名"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
これらを実装した例です。
この実装例では、PreferenceActivityに、
PreferenceScreenにタイトルだけを表示して、上記のインテントを発行するボタンとして利用しています。
これの実装方法は、前エントリーでご紹介しています。
よければご参考にしてください。
kojiko-android.hatenablog.com
今回参考にさせていただいたサイト様です。
techbooster.jpn.org
PreferenceActivityに、空のボタンを実装する
PreferenceActivityでは、チェックボックスやスイッチを簡単に実装できますが、
一つの行にタイトルだけを表示し、ボタンのようにタップしたら何かを実行したい。
そのような領域を作成するには、PreferenceScreenを利用します。
xmlでPreferenceScreenを配置します。
<PreferenceScreen android:title="タイトルの文字列" android:key="SAMPLE_KEY"> </PreferenceScreen>
(他のウィジェットのように、サマリーを指定することもできます)
keyは、PreferenceActivity内から
(PreferenceScreen) findPreference("SAMPLE_KEY")
のようにして探す際に必要です。
クリックを検出する
PreferenceActivityのオンクリエイト等で、以下のように記述します。
PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("SAMPLE_KEY"); preferenceScreen.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { // 実行したい処理 return true; } });
通常のボタンのように、クリックリスナーをセットして、実行したい処理を記述します。
例えば、「開発者にメールを送る」、
「シェアする」等の項目を追加するときに便利です。
フリック操作を検出する方法
ユーザーによるフリック操作の検出と、その方向を検出する方法の例
変数の定義
private GestureDetector gestureDetector; private enum Type { UP, DOWN, RIGHT, LEFT, }
方向を表す上下左右の4種類の列挙型を定義します。
フリックの方向によって、これら4つの型の中からどれか一つを返します。
フリック検出のためのリスナーを宣言します
@Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); // GestureDetectorにイベントを渡すために必要です } private final GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Type type ; float startX = e1.getX(); float startY = e1.getY(); float nowX = e2.getX(); float nowY = e2.getY(); float absX = Math.abs(nowX - startX); float absY = Math.abs(nowY - startY); // フリック開始時のx,y座標、終了時のx,y座標を保持 // 指の移動距離の絶対値 if (absX + absY < 50 )return false; // 誤作動を防ぐため、移動距離が短い時は何もしない。調節してください if (absX > absY){ // 横方向の操作の場合 if (nowX - startX < 0) { type = Type.LEFT; } else { type = Type.RIGHT; } } else { // 縦方向の操作の場合 if (nowY - startY < 0) { type = Type.UP; } else { type = Type.DOWN; } } Log.d("hogehoge",type.toString()); // ログに方向を表示 return true; } };
コードの働きについては、アウトコメントをご参照ください。といっても、それほど難しいことはしていません。
typeの値によって、どの方向にフリックされたかが示されますので、その後の処理をわけてください。
余談ですが、hoge って何なんでしょう(笑)。アンドロイドの参考書や、技術ブログによく登場しますね。
ログに吐き出させるときは、めんどうなのでhogehogeとしていますが、まず他とかぶらないので結構便利な言葉かもしれません。
Androidアプリ タイマープラス(無料・有料)
タイマープラス
Androidアプリ
無料・有料
play.google.com
お料理に、勉強に、ヨガやエクササイズに・・・etc。
タイマープラスは、シンプルなキッチンタイマーと、簡単に使いこなせる便利な機能を備えています。
無料版・有料版ともに、同一の機能について、ご紹介します。
本物のデジタルタイマーのような操作性
タイマープラスは、複雑な機能を省き、誰にでも簡単に使いこなせるように設計されています。
飽きがこないよう、ルックスも可能な限りシンプルにしました。
お気に入りの登録
『パスタ8分』、『ヨガ30分』など、よく使う時間はプリセットに保存し、少ないタップでスタートできます。
時間を入力した際に、左に表示される+マークをタップします。お気に入りタイマーを使用するには、
ツールバーのタイマーアイコン(有料版はハートマーク)をタップすると、リストを表示します。
テーマのカスタマイズ
タイトルバーやボタンをお好きな色にカスタマイズ。仕上がりをチェックしながらアレンジできます。
編集したいアイテムを選び、バーで色を調節します。バーは、上から、色相、彩度、明度に対応します。右のチェックボックスにチェックを入れると、全てのアイテムの値を一斉に操作します。カスタマイズモードへ移行する際は、滑らかなアニメーションを伴っています。
鳴動時ポップアップ・シェイクスヌーズ
時間になると、アプリを終了していても、ダイアログがポップアップされ、お知らせします。
お昼寝に使用したときは、幸せな二度寝をサポートします。タイマーが鳴っているときに端末をシェイクすると、同じ時間でタイマーがスタートします。目を開ける必要がありません。
シェイクスヌーズは設定で有効・無効変更可能
いつでも確認・変更できる通知設定
ツールバーの”♪”をタップすると、通知設定ダイアログをポップアップします。
「どれくらいの音量で鳴るんだっけ・・・」そう思ったらいつでも確認・変更ができます。
ボリュームは、消音から端末の最大音量までの間で調整が可能です。
”テスト”をタップすると、設定した値でプレビュー再生します。鳴動時は、これと全く同じ条件で再生・振動します。
バックスペースキー
間違えて入力したときに一文字消すバックスペースキーは、必要性は薄いですが、少しだけストレスが減ります。
カウントアップ機能
タイマー表示が00:00の時にスタートをタップすると、カウントアップを開始します。
1000分の1秒単位で計測。アプリを終了してもカウントを続けます。
通知バー内で、残り時間表示
アプリを起動していなくても、通知バーを上から引き出せば、残り時間を確認できます。表示は一秒ごとに更新。
タッチフィードバック
ボタンを『押した感』を大事にしました。タップした時は、短い振動、見た目の変化、ビープ音でフィードバックを返します。
ユーザー様の声を反映
タイマープラスでは、レビューに寄せられるアイデア、不満点を極力反映し、”プラス”したアップデートを繰り返してきました。
この場で感謝申し上げます。ありがとうございます!
■仕様■
・設定上限
99:99まで。秒の入力が60以上の場合は分に繰り上げ表示(02:70→03:10)、分が99を超える場合は繰り上げしません。
・選択できるテーマ(現行バージョン)
作成したテーマ、起動のたびにランダム、ホワイト、ブラック、ブルー、ピンク、グリーン、ブラウン、オレンジ、アイボリー、蜂蜜、牡蠣、星空、チョコレートミント、レトロ、ストロベリー、ラベンダー、カモフラージュ
・オプション項目
テーマ変更
ステータスバーを隠す
シェイクスヌーズの有効・無効
スリープモードにしない有効・無効
ボタンタップ時の振動・ビープ音の有効・無効
このアプリの開発者は、安心・安全なアプリの開発者であるとしてアンドロイダーの公認デベロッパーに認証されています。https://androider.jp/developer/e650a2000859a80e19cf7a7950e026a8/
———————————————————————
アンドロイドアプリ総合情報サイト「AndroidView/アンドロイドビュー」に掲載中
http://androidview.jp/
———————————————————————
無料版
広告が表示されます。機能は有料版と同等です。
play.google.com
有料版
広告は表示されません。また、いっさいの通信を行いません。
ツールバーのデザインが無料版と少し違いがあります。
play.google.com