前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

Android

ネストしたFragmentのバックスタック時挙動について

実装方法によっては発生しないのかもしれないけれど、自分の開発状況下で発生している問題について。 結論 子フラグメントをバックスタックから復元することはできる。しかし色々変更しすぎてもはや何が決め手になったかよくわからず。以下は本結論に繋がら…

Android Studioのライブテンプレート

Android Studioのライブテンプレートを仕様すると短いコード数で自動的にそれにあったコードを自動生成してくれる。 最新版では以下のとおり。スクショで失礼。toolsNsが個人的には便利。 もちろん自分でも作れるのでプロジェクトでお約束のコードは独自の名…

Gridビューの周囲の枠線を非表示にする

課題 Android2.3系の話なので最新端末では関係なかったりするがGridViewをセットするとアイテムの周囲にスペース確保され、ヘッダーのような横一杯に表示したいようなフルサイズの画像などを貼ろうとするとずれる結果となる。 対応 listSelectorが指定されて…

RecyclerViewを使う

とりあえず一覧を表示するサンプル。 ポイント レイアウトの種類はLaytoutManagerで管理 ViewHolderの利用が前提になっている setOnItemClickListenerがRecyclerViewには存在しないので、RecyclerView.Adapter内のViewHolderのコンストラクタか、同Adapterの…

Material Design Color paletteをAndroidで使う

お題 Android Material Designでカラーパレットが提供されており、名前も決めてくれているので それを使いたい。Colors.xmlになってれば楽チンである。 回答 Githubにあったので素直にもらう。ダウンロードしてそのまま使用する。 https://gist.github.com/k…

パッケージ名による外部アプリの起動

パッケージ名がわかっているケースで、アプリがインストールされていればアプリを起動し、 されていなければGoogle Playに遷移する。 String packageName = "jp.theylive.android.app"; //AndroidManifest.xmlのpackageNameに相当 PackageManager pm = mCont…

ImageViewのsetBackgroundResourceとsetImageDrawableについて

ImageViewにはViewから継承したsetBackgroundResourceの他にsetImage系のメソッドがあって、 この二つのメソッドを同時に使うといい感じに画像を重ねて表示してくれて便利だったのだけど、 2.3系の端末でテストしてたら片方しか表示されなかった。どうやらse…

Facebookログイン直後にProfileがnullになるケース。

現象 Facebookログイン時にFacebookCallbackのonSuccessが呼ばれ、AccessTokenが取得できているにも関わらず、Profile.getCurrentProfile()がnullになるケースがあった。 FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() { @Override public v</loginresult></loginresult>…

FacebookCallbackが実行されない

ちょっと嵌ったのでメモ。Facebook Android SDKの4.2でCallbackManagerのonActivityResultまでバッチリ呼ばれたにも関わらず、FacebookCallbackが呼ばれないケースがあった。結論からいうとrequestCodeが一致していなかった。 //登録 mCallbackManager = Cal…

Lintエラーを無視してビルドしたい

リリースビルド時にLintの警告が出てビルドできない、しかしビルドしたい。そんな場合。 //build.gradleを編集 android { lintOptions { checkReleaseBuilds false abortOnError false } }

EditTextで改行入力

EditTextはデフォルトで複数行入力に対応している。しかしながらキーボード側にそれが伝えられていないとキーボード側に改行ボタンが出てこない。inputTypeで変更する。 <EditText android:inputType="textMultiLine" />似た項目にtextImeMultiLineがあるが、こちらは期待した挙動をしなかった。未調査。</edittext>

ソフトウェアキーボードの表示

画面表示のタイミングでEditTextにフォーカス当ててキーボードを表示させたいケース。 メモ書き。適宜修正。 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);Fragment画面の場合はInputMethodManagerのshowSoftInputで…

Android端末にJolla Launcherアプリをインストールする。

フィンランドのJolla OSの公式サイトからランチャーアプリが配布されてたのでAU版AQUOSに入れてみた。 http://www.thejollablog.com/jolla-launcher-gets-ported-android-4-2/ マーケットアプリではないのでapkをダウンロードして自分でインストールする必要…

ARTとDalvikの違い

Intelに関連記事が掲載されていたのでメモ https://software.intel.com/en-us/blogs/2014/06/18/art-vs-dalvik-introducing-the-new-android-x86-runtime AOT vs JIT Ahead-of-Time (AOT) ARTはAOTコンパイラによりアプリインストール時にDEXバイトコードを…

OS X Yosemite アップデート後にAndroid Studioが起動しなくなったら

何も考えずにYosemiteにアップデートしたらAndroid Studio、IntelliJともに起動しなくなった。焦らず騒がず以下をインストール。自分はこれで解決。 http://support.apple.com/kb/DL1572と思ったが副作用があるらしく、Android Studio上で"a"と入力すると"aa…

プロジェクトのGradle化

プロジェクトを作ったり、既存プロジェクトをAndroid StudioにインポートしたけどGradle関連のファイルが無いなど、そんなときに後からGradleプロジェクトに変更する方法。Gradleのインストールは完了していることを想定。まずは素直にFile → Import Project…

Localeクラスとそのメソッドの実行結果確認

java.util.Localeクラスを使用することになったのでそのメソッドが何を返却するかをチェック。 日本の場合 メソッド 出力 getCountry() JP getLanguage() ja getVariant() getDisplayCountry() 日本 getDisplayLanguage() 日本語 getDisplayName() 日本語 (…

外部アプリからの画像の取得および利用

外部アプリから画像を選択し、自分のアプリで利用する方法 対象アプリの起動。 Intent.setActionにACTION_GET_CONTENTを渡す。setTypeで画像をリクエスト。 public void onClick(View view){ if(view.getId() == R.id.selecter){ Intent intent = new Intent…

androidコマンドのヘルプ

android -h実行結果 $ANDROID_HOME/sdk/tools>android -h Usage: android [global options] action [action options] Global options: -h --help : Help on a specific command. -v --verbose : Verbose mode, shows errors, warnings and all messages. --c…

emulatorのショートカットキー一覧

確認コマンド $ANDROID_HOME/tools/emulator -help-keys実行結果 When running the emulator, use the following keypresses: HOME Home button F2, PAGEUP Menu (Soft-Left) button Shift-F2, PAGEDOWN Star (Soft-Right) button ESCAPE Back button F3 Cal…

Google+のAndroid関連Tipsを抽出する

Google+のAndroidDevelopersアカウントでは定期的にTipsが投稿されているがこまめにチェックしきれないので時間のあるときにまとめて読みたい。ユーザーとタグで絞込をする。 +AndroidDevelopers/posts #Protipそうすると下記のURLになるので https://plus.g…

harmonyソースのありか

Android Sourceにおいて、apache.hermony系のソースコードはどこにあるかについてのメモ 結論をいうとlibcoreにあった。 libcore/luni/src/main/java/org/apache/harmony

Android Wear デザイン原則

公式サイトの「Design Principles of Android Wear」の一部書き出し http://developer.android.com/intl/ja/wear/design/index.htmlAndroid Wearの体験とは以下のようなものである。 状況を認識し、スマートに これらのデバイスはコンピューティングによる認…

Logcatをコマンドラインで使う

LogcatをEclipseから使うとEclipse側のメモリを無駄に消費してしてしまうのであれかなと思ったので、コマンドラインで使うことにする。 参考 http://developer.android.com/intl/ja/tools/debugging/debugging-log.html タグ名で絞り込む adb shell logcat -…

AsyncTaskをワーカースレッドから呼ぶべからず

Androidの古いバージョンでは以下の現象が発生しうるのでメモ。 現象 あるアプリでAsyncTaskのコンストラクタ呼び出し時に以下のようなエラーが発生。 java.lang.ExceptionInInitializerError at sample.service.servicetest.SampleService$1.run(SampleServ…

Lintがコマンドラインで実行できない

Android SDK Toolsを最新化したらLintコマンドがエラーになるようになった。 tools>lint --version Exception in thread "main" java.lang.NoClassDefFoundError: lombok/ast/AstVisitor at com.android.tools.lint.checks.BuiltinIssueRegistry.<clinit>(BuiltinIss</clinit>…

TextView.setTextにnullをセットするとどうなるか

答え:サイズ0の文字列に置き換わる。 //android.widget.TextViewのソース抜粋 private void setText(CharSequence text, BufferType type, boolean notifyBefore, int oldlen) { if (text == null) { text = ""; } …以下略バージョン1.6の頃からだから基本…

HttpClient for Android

AndroidのHttpClientはGoogleからはサポートされなくなってしまっていたのだけど、 ApacheのHttpcomponentsプロジェクトで4.3のAndroid版を開発してくれているようだ。http://hc.apache.org/httpcomponents-client-4.3.x/android-port.htmlまだSNAPSHOTらし…

TargetApiアノテーションで1.6端末でVerifyErrorエラー

Android端末の複数バージョン対応としてTargetApiアノテーションを使って 以下のようなprivateメソッドを記述したところ 1.6端末でActivity起動時にVerifyErrorが発生した。 //呼び出し元 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { Pic…

Context.getSystemServiceで取得可能なサービス一覧

追記 AndroidXから `ContextCompat.getSystemService(context:Context, class:Class)`が可能になった。 Castも不要なので取得可能なクラスが分かっている場合はこちらの方が楽だろう。 val am = ContextCompat.getSystemService(this, ActivityManager::clas…