Android

TextAppearance のプレビュー画面を作る

AndroidのリソースXMLを読み書きできない人に TextAppearance の定義内容を共有するためには、わかりやすく定義内容を一覧できる仕組みが必要です。 できれば、以下のように実際のアプリ内の表示とあわせて見られるのが一番良さそうです。 このプレビュー画…

Androidソースコードレビューで指摘する事が多い項目まとめ2

去年Androidソースコードレビューで指摘する事が多い項目まとめという記事を書いた時はアプリ全体を一度に見るような機会が多かったため、内容も大きめのものばかり書いていましたが、最近はプルリクエスト単位でレビューする機会が増えたので細かい項目につ…

最近Android TVアプリの開発で困ったこと

雑にメモ Android TVを正確に判定するのが難しい Android DevelopersのAndroid TV実装ガイドにはTV端末をチェックするという項目があり、 UI_MODE_TYPE_TELEVISIONで判定すればいいよと書いてある。 しかし実際にはUI_MODE_TYPE_TELEVISIONなのにAndroid TV…

最近気になっているGoogle Play Servicesの機能

Google Play Services7.5、7.8で素敵な新機能がいっぱい追加されたけど全然追いつけていないのでメモだけ…。 Nearby Nearbyは近くにあるAndroid/iOS端末同士でやりとりすることができる機能です。 メールやSMS、QRコードなどを介することなく接続できるので…

Genymotionの有料アカウントについて

Genymotionについて Genymotionは高速なAndroidのエミュレータです。 基本的な機能についてはググればいっぱい出てくるので割愛します…。 有料アカウント GenymotionのHPに無料アカウントと有料アカウントで使える機能の違いは書いてあるのですが、具体的に…

端末情報を調べるときに見るページ

au auの開発者向けページは他キャリアの同様のページとくらべて非常にわかりやすい。 他がひどいのでわかりやすいというだけで高評価だ。 Android(TM) 技術情報 | 開発者向け技術情報 | au 端末スペックは細かく乗っていて一覧性が高い。 更新スピードも早く…

Android Develoeprsの歩き方

はじめに この記事はAndroid Developersを便利に使うための方法が書いてあります。 前提としてAndroid Developersのページ構成などをある程度理解している必要があるので、まずは下記記事を参考にAndroid Developersの構造を把握してください。 Android Deve…

Android Developersでよく読むページ

Android Developersを読むときの注意点 どのページにも言えることですが、一見目次のように見えてもページ階層と関係ないリンク集だったりすることがあります。 たとえばBest Practicesというページの「BLOG ARTICLES」は一見このカテゴリの子ページリンクに…

Androidでよく使うdp指定まとめ

dpとは dpの仕組みについては過去にまとめています。 いまさら聞けないdp入門 本記事ではレイアウトを組んだり画像を用意する際によく使う数字をいくつか紹介したいと思います。 レイアウトの場合はそのままdp指定できますが、画像はdpサイズを元に各dpi用の…

タブレットUIアンチパターン

はじめに Android Developersではいくつかのページに渡ってタブレット端末のUI設計について説明しています。 本記事ではそれらの説明を元に、タブレットでアプリを表示した際に問題となりやすいデザインアンチパターンについて説明します。 参考URL Supporti…

ActionBarタブ・ドロップダウンリストの置き換え方法まとめ

はじめに API level 21以降、NAVIGATION_MODE_LISTやNAVIGATION_MODE_TABSといったActionBarと連動したナビゲーション要素が非推奨となりました。 これらのUIの置き換え方法についてはAndroid Developersで該当定数のリファレンスに「Consider using other c…

2014発売Android端末のdp解像度まとめ

はじめに Android端末は機種数が多く、OSバージョンやハードウェアがそれぞれ異なるためにAndroidでアプリを作ることは大変だと言われています。 特にディスプレイについてはそれぞれが異なった画面サイズや解像度を持つため、Androidの画面設計は複雑だと思…

AppIndexingについて

AppIndexingとは AppIndexingとは、ウェブページURLやキーワードとアプリの特定画面へのディープリンクを紐付け、Google検索結果から直接アプリの特定画面を起動させるための仕組みです。 現在はウェブサイトにアプリ用ディープリンクを埋め込む方法(狭義のA…

Android 5.0 差分メモ

自分用あとで読むメモ Android 5.0 概要 Android Lollipop | Android Developers 新API 概要 Android 5.0 APIs | Android Developers API 差分 API Differences between 20 and 21 Support Library 変更点 Support Library | Android Developers Support Lib…

【Android】いまさら聞けないdp入門 という記事を更新しました。

Qiitaに書いていた【Android】いまさら聞けないdp入門 - Qiitaという記事を更新しました。 (この記事も元々は同じ内容を記載していましたが、両方メンテすると大変なのでQiitaへのリンクページにしました) さすがに公開から1年以上経つとAndroid Developers…

Androidアプリのタブレット対応レイアウトまとめ

はじめに タブレットとスマートフォンの最大の違いは画面の横幅です。 Androidアプリをタブレット対応させる際は、いかにして画面の横幅を埋めるかが重要になります。 この記事では余白を埋める様々なパターンについて解説しています。 Android Developersの…

Android UI/UX アンチパターン

参考資料 Android Developers Amazon.co.jp: Smashing Android UI レスポンシブUIとデザインパターン: Juhani Lehtimaki, 佐藤 伸哉, 株式会社クイープ: 本 画面全般 スプラッシュ画面 必要のないスプラッシュ画面の表示はやめましょう。 なぜダメか 多くの…

Androidソースコードレビューで指摘する事が多い項目まとめ

業務でソースコードレビューを行う機会が増えたので、複数回指摘した項目や気になった実装などをまとめてみました。 こういう観点をできる人と共有できるといいなあ…。 2014/09/29 23:00 一部修正しました。 業務上ソースコードレビューの名目で仕様・デザイ…

ListViewのpadding設定

ListViewにpaddingを設定する ListViewで子要素の配置を調整する場合、通常はandroid:paddingで描画領域を、android:dividerHeightで子要素同士の間隔を設定する。 この時、単純にandroid:paddingだけ指定すると以下のようにリストの上下端で子要素が途切れ…

3行未満のAndroid Tips集

記事にするまでもない3行未満で書けるレベルのTipsとリンク集。 常識レベルのものも含む。 URLのパスの結合にはUri.withAppendedPathを使う スラッシュの重複を省いてくれて便利。 http://developer.android.com/reference/android/net/Uri.html DBのColumns…

買ってよかったAndroid関連電子書籍まとめ

Androidの技術書、どうせ買うなら電子書籍がいいよね!と電子書籍をあちこちで買ったり買い直したりしてるので知見を共有します。 どこで買うべきか 電子書籍で技術書を購入する際、なるべく制限の少ないものを探すことが重要です。 何も考えずに買ってしま…

画面回転時のActionBarの挙動まとめ

はじめに ActionBarの一部の機能は、端末の画面の向きによって挙動が異なる場合があります。 この記事では特に画面回転時に大きく挙動が変わる部分についてまとめました。 MenuItemの表示数が変わる ActionBarに表示されるMenuItemの数は画面幅のdpによって…

SyncAdapterの実装メモ

SyncAdapterとは SyncAdapterとは、AccountManager上のアカウントとContentProviderを紐付けることにより、クラウド上のデータと端末のデータを同期させる仕組みです。 一般的な動作としては「ContentResolverにAccountManagerのアカウントとSyncAdapterを登…

AccountManagerでアカウントを管理する

はじめに AccountManagerにおいて、アカウントの管理やトークンの取得を直接行うクラスのことをAuthenticatorと呼びます。 それにあわせて、この記事ではAuthenticatorを実装したアプリのことをAuthenticatorアプリと呼ぶことにします。 Authenticatorアプリ…

AccountManagerを利用する

AccountManagerとは AccountManagerとは、Androidにおいて様々なWebサービスのアカウントを管理するための仕組みのことです。 アプリはAccountManagerを利用することで以下のような様々なことができるようになります。 アカウント情報の取得 アカウントの編…

ActionBarのメニューにCheckBoxを表示する

前置き ActionBarでは、メニューをすべて表示することができなかったり"showAsAction="never"を設定したメニューがある場合、一部のメニューをActionBar右端のドロップダウンに格納することがあります。 Andorid Developersではこの機能をAction Overflowと…

トグルボタンの実装

トグルボタンとは トグルボタンとは、ユーザが2つの状態(On/Off)を交互に切り替えることのできるUIです。 AndroidではToggleButtonやCheckBoxがこれに当たります。 API Level 14でON/OFFをわかりやすく切り替えるためのViewとしてSwitchが追加されました。 h…

<uses-permission>設定の罠

<uses-permission> Androidアプリが特定の機能を利用する場合、AndroidManifest.xmlにその機能の一覧を<uses-permission>として記述します。 たとえば、マイクによる録音を行うアプリの場合、以下の様な記述が必要となります。 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.nein37.kanidaisuki" > </manifest></uses-permission></uses-permission>

AndroidのUtilsクラスまとめ

はじめに androidのUtilsをまとめた資料が見当たらなかったので作りました。 android.*パッケージに含まれるものだけまとめています。 TextUtils 文字列操作用Utils。 isEmpty()とかequals()とかよく使う。 文字列操作系も大体揃っていて便利。 isGraphic()…

Androidに最適化されたJavaクラス一覧

はじめに Androidではモバイル端末での処理に最適化されたいくつかの代替クラスが用意されています。 ほとんどがHashMap関係のメモリ消費を抑えるためのものですが、Android Developersにも代替クラスをまとめたページはないようなので、知っている範囲でま…

xmlns:toolsでAndroid Studioのレイアウトエディタを活用する

xmlns:tools? Androidのレイアウトファイルに以下のような記述が含まれていることがあります。

レイアウトの余白を埋める

余白を埋める 開発中、ViewとViewの間に余白を設けたい場合があります。 通常はmarginやdividerで調整しますが、間に余白のためのViewを置く場合もあると思います。 実はAndroidには、余白調整のためのSpaceというViewが存在しているのです。 Space SpaceはA…

Upボタンの実装メモ

はじめに Upボタンの実装サンプルとかあまり詳しく書いてないので自分が実装したときのメモをまとめた。 正確性にあまり自信がない。 Upボタン ActionBarの左端にはUpボタンと呼ばれる上位画面へ遷移するための機能がある。 ナビゲーションバーのBackボタン…

安全にファイルを操作する

AtomicFile API level 17からファイルを安全に操作するための仕組みとしてAtomicFileが導入された。 これは書き込み開始時に元ファイルをバックアップし、失敗時にはロールバックすることでファイルの破損を防ぐ仕組みだ。 SupportLibraryにもr11から追加さ…

マルチペインレイアウトを簡単に実装する方法

はじめに マルチペインレイアウトについての説明は省略する。 http://developer.android.com/design/patterns/multi-pane-layouts.html マルチペインレイアウトのうち、左側ペインがリスト・右側ペインが詳細になっているものをMaster/Detailパターンと呼ぶ…

スリープ時にもBroadcastを処理する方法

スリープとBroadcast 端末がスリープ状態の場合でもBroadcastReceiver.onReceive()の呼び出しは通常どおり行われる。 ただし、onReceive()からServiceを呼び出して処理させる場合、その処理が中断されてしまう可能性がある。 確実にバックグラウンド処理を行…

BroadcastReceiverの処理結果を受け取る方法

BroadcastReceiverの処理結果が取れる? ある日、BroadcastReceiver.setResult()があることに気がついた。 ずっとBroadcastの結果は取れないものだと思っていたが、Context.sendOrderedBroadcast()を使用することでその結果を受け取ることができるようだ。 …

PopupWindowで画面内にダイアログ風の表示をする方法

Dialogの実装は面倒 AndroidのDialog実装は割りと面倒くさい。 API level 13でshowDialogが非推奨となってからはDialogFragmentを使うのが一般的になったためだ。 DialogFragmentを使うとコールバックや非同期処理に気を使わなくてはいけないため、どうして…

ActionBarの共有ボタンに共有履歴を表示する方法

ShareActionProvider ICS以降、ActionBarに共有MenuItemを置く際、共有履歴を表示することができるようになった。 ShareActionProviderはその実装のための仕組みとして導入された。 実装 まず、menu定義に共有MenuItemを定義する。 このとき、android:action…

SwipeRefreshLayout覚え書き

SwipeRefreshLayout Support Library revision 19.1.0からSwipeRefreshLayoutという新しいViewGroupが追加された。 これはいままで引っ張って更新とかPullToRefreshとか呼ばれていた機能を実装できるものになる。 以後長々と書くが、公式サンプルのほうがわ…

Fragment使用時のIllegalStateException回避

前置き このページの内容はstackoverflowの素晴らしい回答を参考にしている。 IllegalStateException? Fragmentを使っていると、画面遷移の際に以下の様が例外が発生することがある。 java.lang.IllegalStateException: Can not perform this action after o…