読者です 読者をやめる 読者になる 読者になる

kojiko-android’s blog

開発中にハマった時の解決策や、忘れがちなことを残しておきます。

Androidアプリ終了に広告を出すとポリシー違反になる!?

ポリシー違反の回避と、長く使ってもらうアプリにするための考察 アプリ終了時にインタースティシャルなどの広告を表示するのは、 Googleのデベロッパーポリシー違反にあたります。 Androidに慣れ親しんでいるユーザーは、端末のバックボタンを押したら、 一…

ViewSwitcherの任意のページに飛ぶ

ViewSwitcherは2つのビューを切り替えることができますが、 切り替えるメソッドがshowPrevious()かshowNext()しかないため、 「進む」「戻る」しができず、 ページを指定して切り替えることができません。そこで、getDisplayedChild()を呼び出すと、現在表…

端末の音量をコードから変更する

端末の音量を設定するには、AudioManagerを介して行います。 各ストリームごとの、音量を設定、現在の音量を取得、最大値を知る等のことができます。 最大値は端末によって違い、7だったり15だったりするので、 独自にシークバーなどを実装するときは、最大…

NumberPickerの5つ刻みなどに変更する

デフォルトでは1ずつ刻みのNumberPickerを、5つ刻みなどに変更する方法です。私の場合、どうもうまく行かなくて、以下のような回りくどいやり方にしたら 思ったように実行できました。 ナンバーピッカーを拡張して、カスタムナンバーピッカーを作り、 以下の…

プライバシーポリシー

プライバシーポリシー 制定 2017年2月7日 最終改定日 2017年2月8日 責任者 Kojitto 連絡先 kentaro198477@gmai.comKojittoは、Kojittoの提供するアプリ(以下、当アプリ)上で提供するサービスにおける プライバシー情報の取り扱いについて、以下の通り プラ…

Shapeでアクアボタン風リソース

Shapeで作ってみた 前回記事と同様に、こんどは横長のアクアボタン風リソースを作ってみました。 ちょっと違うけど、なんとなくそれっぽいのではないかと思います。 緑のボタンはテキストシャドウを設定しています。 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <layer-list> <item> <shape android:shape="rectangle" > </shape></item></layer-list></item></selector>

Shapeでアクアなボタンを作ってみた

以下のようなリソースを作ってみました。 レイヤーリストに、左から①②③④のアイテムを順次描画しています。 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <layer-list> <item > <shape android:shape="oval" > <size android:height="100dp" android:width="100dp"/> </size></shape></item></layer-list></item></selector>

電卓アプリ【お買い物電卓】リリースしました!

お買い物電卓【割引・割り勘・消費税を簡単計算!】 - Google Play の Android アプリ お買い物電卓~☆・・・いいタイトルが思いつかなかった(笑) 「何が出来るか」がわかることと、文字が全て表示されることが大事ということでコレにしました。 式と答え…

SearchViewを使って検索のインテントを発行する

SearchViewを使って検索のインテントを発行する方法です。ウィジェットとして任意の位置に配置できるほうのSearchViewです。 画面上部に現れる検索ダイアログや、アクションバーに組み込まれている検索ボックスではありません。 SearchView searchView = (Se…

最後にボタンを押してから数秒後に一回だけ処理をする

最後にボタンを押してから数秒後に一回だけ処理をする方法です。 たとえばフローティングアクションボタン(FAB)を設置していて、 ユーザーが何かをしているときはFABは隠しておき、操作が終わった後にちょっと間を置いて再び表示したいときなどに。 private …

画面の向きを取得する

現在の画面の向きを取得する方法です。 Configuration configuration = getResources().getConfiguration(); switch(configuration.orientation) { case Configuration.ORIENTATION_PORTRAIT: // 縦向き break; case Configuration.ORIENTATION_LANDSCAPE: /…

テキストサイズをButtonに収まるように調整する

テキストサイズをButtonに収まるように調整するためのメソッドです。 TextViewでテキストサイズを自動調整する方法は検索すると多数出てきます。 こちらを参考にさせていただきました。ありがとうございます。 TextViewのフォントサイズを自動調整する。 - m…

EditTextの指定位置にカーソルを移動

EditText備忘録 指定位置にカーソルを移動する エディットテキストのsetSelection(int型)メソッドの引数にカーソルの位置を指定します。 0で、文字列の先頭になります。 EditText editText; editText.setSelection(3); 文字列の最後にカーソルを移動する edi…

EditText等で、バックスペースの入力を検出する

EditTextの入力中に、ソフトキーボードのバックスペースキーが押されたときのイベントの検出は、以下のようにします。 mEditText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (…

EditText等で、Enterキーの入力イベントを検出する

ユーザーがEditTextで文字を入力中に、ソフトキーボードのEnterキーが押されたときのイベントを検出する方法です。EditTextに以下のようにリスナーをセットします。 mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override…

Android実機でデバッグできるようにする

Android実機でデバッグできるようにする方法です。 各メーカーの公式ドライバーをインストールする方法もありますが、 以下の方法を利用するとわずか数分で実機デバッグができるようになります。 端末のほうでは、開発者向けオプションが有効になっているも…

Kojittoアプリ プライバシーポリシー

プライバシーポリシー 2016年12月22日 改訂 開発者:Kojitto mail:kentaro198477@gmail.comKojittoの提供するAndroidアプリ「タイマークラシック」、「Digital Timer - free」(以下、当アプリ)では、 ユーザー様の個人情報(年齢・性別・位置情報等)の一…

アクティビティをスタックに残さなくする

例えばタイマーアプリを作っていて、タイマー終了時に透明なアクティビティを開始して、アラートダイアログを表示し、OKが押されたり、dismissされたりしたときにそのアクティビティをフィニッシュするとします。 この透明アクティビティがスタックに残って…

【電卓アプリを作るvol.7】アプリ終了時の状態を保存

前回まで・・・ 計算結果に端数が出た場合に、 それを丸めて表示する静的メソッドを実装しました。今回は、 計算中に電話がかかってきて、 戻ったら全てクリアーされていたという、 悲しいことが起こらないように、 終了時の状態を保存し、 再開したときにロ…

【電卓アプリを作るvol.6】計算結果を成型する

前回まで・・・ とりあえず、必要最低限の電卓ができました。 今回は、計算結果を丸めて表示する機能を実装します。 現状の問題点 今の段階では、1+1=の結果が、"2.0" (シンプルに "2" でいいんじゃない?)また、10÷6のように割り切れない計算をすると …

【電卓アプリを作るvol.5】UIをレイアウトする

前回まで・・・ 汎用性の高いCalcクラスを作りました 今回は、最低限のUIと電卓として機能するまでを行います。UIをレイアウトします。 お好みのようにデザインしてください。 基本的には、電卓の液晶画面にあたる部分をTextViewで、 キーはButtonで配置しま…

【電卓アプリを作るvol.4】ソースコード2/2

Calc メインの電卓クラス アクティビティからnewして使います。 public class Calc implements Context { // ディスプレイ表示が変わるたびに、文字列をコールバックします public interface Callback{ void onTextChanged(String string); } Callback callb…

【電卓アプリを作るvol.3】ソースコード1/2

前回まで・・・ 電卓のアルゴリズムについて考えました 今回は、ソースコードを掲載します。 参考書のような詳細な解説は割愛しますが、 状態遷移表とコードを何度も見比べれば、 理解できると思います。アンドロイドスタジオのエクスプローラービューは↓こ…

【電卓アプリを作るvol.2】アルゴリズム

前回まで・・・ 状態遷移表ができました。 今回はこの状態遷移表に基づいた処理を、どう実装するのかを考えます。 状態を定義 A、B、C、Dの各状態を、クラスで表現します。「状態をクラスで・・・」というと、漠然としていますが、 結局のところ、何かイベン…

【電卓アプリを作るvol.1】状態遷移

電卓ロジックを考える 電卓を作るにあたって、 電卓をどのように操作していたかを思い出してみます。まず数値を入力して、演算子キーを押し、 2つめの数値を入力して、最後に[=]キーを叩くという流れではないでしょうか。演算子を押した直後に数値を入力す…

【電卓アプリを作る】はじめに

電卓アプリを作る! 信頼性が高く、デザインも良い、 小数点セレクターやラウンドセレクターで、 会社の方針に沿った計算結果を表示。 %や定数計算にも対応! あなただけのオリジナルな電卓も作れるように、 汎用性も高い!↑こんな電卓を、これから何回かに…

LinkedListクラスのよく使うメソッド

便利なLinked List リンクドリストはオブジェクトの配列なのですが、汎用性が高く、 とにかく使い勝手が良い。私の一番好きなクラスかもしれない(笑)。 LinkedListの詳細についてはここでは記載しませんが、 オブジェクトをぽんぽん入れられて、前から(後…

カラーフィルターまとめ(PorterDuff.Mode)

イメージビューにカラーフィルターを掛けた時の効果のサンプルです。適当なボタンの画像と、ドロイド君に、Color.REDと、各モードのカラーフィルターを施しました。ボタン部分とドロイド君は不透明で、外側は透明です。もっと透明度に対する影響がわかりやす…

doubleの値を、カンマつきの文字列に変換

1234567(double) を 1,234,567(String) に変換します。 double value = 1234567d; DecimalFormat df = new DecimalFormat("#,##0.###"); String string = df.format(value); コンストラクターのパラメーターはフォーマットのルールの定義のようなもので 0 は…

独自に用意したフォントを使う

開発していると、デフォルトのフォントで日本語を表示すると、 なんかオシャレ感に欠ける・・・ということがあります。 シンプルな概観や、洗練された印象を与えるには、フォントの効果は少なからずあるかと思います。 以下、自分で用意したフォントをアプリ…

小数点以下第n位にdoubleを丸める

例えば電卓アプリなどで計算結果を表示する際、 割り切れない数値を、小数点以下第○位まで丸めて表示する方法です。例として、10÷6の結果を、小数点以下第4位を四捨五入して、第三位まで表示してみます。 double value = 10d / 6d; BigDecimal bd = new …

「友達に紹介する」機能を実装する

個人でアプリを開発している場合、 なかなかユーザー数が増えないのが悩みのタネです。インパクトのあるゲームなら、ツイッターによる拡散やユーチューバーが紹介したりすると、 爆発的にダウンロードが増えたりもしますが、堅実なツール系のアプリだと、そ…

PreferenceActivityに、空のボタンを実装する

PreferenceActivityでは、チェックボックスやスイッチを簡単に実装できますが、 一つの行にタイトルだけを表示し、ボタンのようにタップしたら何かを実行したい。 そのような領域を作成するには、PreferenceScreenを利用します。 xmlでPreferenceScreenを配…

フリック操作を検出する方法

ユーザーによるフリック操作の検出と、その方向を検出する方法の例 変数の定義 private GestureDetector gestureDetector; private enum Type { UP, DOWN, RIGHT, LEFT, } 方向を表す上下左右の4種類の列挙型を定義します。 フリックの方向によって、これら…

Androidアプリ タイマープラス(無料・有料)

タイマープラス Androidアプリ 無料・有料 play.google.comお料理に、勉強に、ヨガやエクササイズに・・・etc。 タイマープラスは、シンプルなキッチンタイマーと、簡単に使いこなせる便利な機能を備えています。 無料版・有料版ともに、同一の機能について…

shapeで定義した図形の色を動的に変える方法

xmlでshapeにより定義した図形に、動的にカラーフィルターをかける方法です 以下のようなshapeのリソースを、後述するリニアレイアウトのバックグラウンドに指定しているとします。 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp" /> <stroke android:width="2dp"/> </shape> コードから、上のshapeの図形にカラーフィルターをかけてい…

Toolbarのメニューアイコンの色を変える方法

Toolbarの右側に並ぶメニューアイコンの色を変える方法です アプリの外観を動的に変える機能を持ったアプリなどは、 メニューアイコンの色も変えると、統一感や、洗練された印象を与えることができます。メニューアイコンは、以下の方法で、色や透明度を変え…

フォントサイズを自動調整するテキストビュー

テキストビューに文字列を表示させる際、 文字列がテキストビューの縦・横幅にぴったり納まるように フォントサイズを自動調整するテキストビューです。こちらのサイトを参考にさせていただきました! 思った通りのレイアウトができ、本当に助かりました。あ…

計算結果に”E”が含まれる場合

doubleからStringに変換したときに、計算結果に”E”の文字が含まれて表示される場合の対処 一見、エラー(ERROR)の「E」では、と思うかもしれませんが、これは桁数が大きくなっても正確な値を表すための表現で、Eより左の数 × 10 の (Eより右の数 乗)を表し…

ボタンをタップした時に動的に色を変える方法

たとえばカラーのカスタマイズが出来るアプリのように、 アプリ内から動的にボタンの色を変更した後、その色に基づいて タップした時に色を変える方法です。ボタンを”押した感”を演出します。ColorTintListや、セレクター等を使わずに、 ビューの色を取得 → …

FragmentDialogを使う

備忘録は、確認が完全でないため、不確かな情報が含まれる場合があります。 フラグメントダイアログを継承した、独自のダイアログの作成方法です フラグメントダイアログは、newInstanceでインスタンス化する。 また、その際に任意のパラメーターを定義する…

NotificationCompat 内容を一部更新する

NotificationCompatを利用したノーティフィケーションの発行、部分的な更新の方法 通知が出るときのアニメーション無しに、通知の一部を更新する方法です。 また、スワイプや、”通知を全て消去”しても消えない通知を作る方法です。(注) 端末を上から下にス…

APIレベルを取得する(処理を分ける)

APIレベルによって処理を分ける方法です。 APIレベルを取得する わずか一行で取得可能です。 int apiInt = Build.VERSION.SDK_INT; OSのAPIレベルを整数値で取得できます。 各レベルは、コードネームの定数で定義されています。 Build.VERSION_CODES.LOLLIPO…

◆AndroidStudio◆メモリを2G→4Gにした結果

アンドロイドスタジオがいい加減重いと感じたので、 メモリ増設を決断しました。 メモリ増設なんてやったことなかったので、不安でしたが、 スマホでいろいろ調べてみると、 意外と敷居が低そうなので、やってみることに。 まずPCのマニュアルから、適合する…

サウンドピッカーを呼び出して着信音等を取得する

着信音や通知音を取得できるサウンドピッカーを呼び出す方法と、その結果の受け取り方 黙示的インテントから、サウンドピッカーを呼び出します。 Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXT…

アニメーションさせる(Canvasを使ったゲームなど)

パズルゲームなどで、タイルを動かした時に、瞬時に移動するのではなく、 滑らかにアニメーションしながら移動したい。 なおかつ、端末の処理速度などによって、早くなったり遅くなったりせず、どのような端末でも一貫した動きが欲しい。 そのような機能を求…

サイズをdp(dip)で指定する

ピクセル密度が異なる端末でも、対象の図形やビューをおおかた同じ大きさで表示させるには、dp値を指定します。 dp(dip)についての詳細は、ここでは省略させていただきます。 dp値から、実際のピクセル数を求める ピクセル = getDisplayMetrics().density *…

FREETEL MIYABI(雅)のレビュー

FREETEL MIYABI(シャンパンゴールド)を買ったので、さっくりとレビューします。 いいところ SIMフリーであること 当然といえば当然なんですが、なんといってもSIMフリーであることです。 大手三社以外の電話会社が選べるので、中にはとても安いところもあ…

NotSiblingエラー

is not a sibling in the same relativelayout [NotSibling]のようなエラー文が出た場合の対処方法 アプリケーションのAPKファイルを作成する際に、上記のようなエラーが発生しました。 原因としては、レラティブレイアウトの相対関係において、基準となるビ…

スリープ状態を解除する(コードから解除する)

端末をスリープ状態から解除するコードの一例です アラームやタイマーアプリの鳴動時に、ユーザーに知らせるために端末のスリープ状態を解除したい場合に有効です。 端末をスリープから解除する(画面の明かりを点ける)ための処理をサンプルメソッドのwakeF…