タグ

ブックマーク / y-anz-m.blogspot.com (52)

  • RecyclerView のクリックをどこで処理するか

    RecyclerView.Adapter の責務はデータと ViewHolder の紐付けなので、View がタップされたときの処理(リスナーをセットすることではない)を Adapter 内に書くべきではないと思っています。 ではどうしているかというと、View がタップされたときに呼び出すメソッドを Adapter 内に定義しておき、Activity や Fragment で Adapter を生成するときにそのメソッドを Override してタップされたときの処理を記述するようにしています。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

  • Android CheckBox 画像の正しいカスタマイズ方法

    各テーマでのチェックボックスのスタイルは android:checkboxStyle で指定されています。 以下は 4.0.3 のコードですが、この部分は 3.0 で Theme.Holo が追加されて以降特に変わっていません。 http://tools.oesf.biz/android-4.0.3_r1.0/xref/frameworks/base/core/res/res/values/themes.xml ... ... ... Widget.Holo.CompoundButton.CheckBox と Widget.Holo.Light.CompoundButton.CheckBox を見ると、Widget.CompoundButton.CheckBox をそのまま継承しているだけです。 http://tools.oesf.biz/android-4.0.3_r1.0/xref/f

    Android CheckBox 画像の正しいカスタマイズ方法
  • Android Studio でよく使うコマンド

    2023 (6) ► 12月 (1) ► 7月 (1) ► 5月 (1) ► 4月 (1) ► 3月 (2) ► 2022 (17) ► 12月 (2) ► 11月 (3) ► 9月 (2) ► 8月 (2) ► 7月 (2) ► 5月 (2) ► 4月 (2) ► 3月 (1) ► 2月 (1) ► 2021 (46) ► 12月 (2) ► 10月 (1) ► 9月 (1) ► 8月 (3) ► 7月 (2) ► 6月 (5) ► 5月 (12) ► 4月 (7) ► 3月 (5) ► 2月 (7) ► 1月 (1) ► 2020 (44) ► 12月 (6) ► 11月 (5) ► 10月 (1) ► 9月 (1) ► 8月 (2) ► 7月 (2) ► 6月 (7) ► 5月 (4) ► 3月 (8) ► 2月 (3) ► 1月 (5) ► 2019 (30) ► 12月 (8

  • vulcanize を使ってみた

    vulcanize は Polymer 用の最適化ツールで、Web Components を1つのファイルにできる。 「Concatenate a set of Web Components into one file」 Polymer/vulcanize : github GTUG Girls のサイトに使ってみた。 $ vulcanize -o index.html index_raw.html Web Components が index.html に結合され、platform.js と polymer.js だけ残る。 vulcanize 前 : http://www.gtuggirls.jp/index_raw.html vulcanize 後 : http://www.gtuggirls.jp/index.html Google の PageSpeed Insights にかけ

  • Material Design のハンバーガーアイコン

    2023 (6) ► 12月 (1) ► 7月 (1) ► 5月 (1) ► 4月 (1) ► 3月 (2) ► 2022 (17) ► 12月 (2) ► 11月 (3) ► 9月 (2) ► 8月 (2) ► 7月 (2) ► 5月 (2) ► 4月 (2) ► 3月 (1) ► 2月 (1) ► 2021 (46) ► 12月 (2) ► 10月 (1) ► 9月 (1) ► 8月 (3) ► 7月 (2) ► 6月 (5) ► 5月 (12) ► 4月 (7) ► 3月 (5) ► 2月 (7) ► 1月 (1) ► 2020 (44) ► 12月 (6) ► 11月 (5) ► 10月 (1) ► 9月 (1) ► 8月 (2) ► 7月 (2) ► 6月 (7) ► 5月 (4) ► 3月 (8) ► 2月 (3) ► 1月 (5) ► 2019 (30) ► 12月 (8

    Material Design のハンバーガーアイコン
  • Android fireside chat

    意訳です。間違っているところもあるかもしれません。。。 何もマークがないのは司会者です。 Q: は質問者、名前付きはパネリストです。 --------------------------------------------------------------------- fireside chat の目的は、基的には Android について知りたいことを君たちが質問することです。今日アナウンスしたことが、どのように行われてきたのか、どのように決まってきたのか。そういうこと全てです。 つまり、Q & A セッションです。部屋の前と真ん中にマイクがあります。質問がある人はそこに並んできいてください。質問がない場合はちょっとした短いセッションをします。 # 会場ちょっと笑い ここ数週間でオンラインから集めた2、3の質問があります。この内のいくつかも聞きたいと思います。 質問をする準備ができ

  • Android Wear アプリ開発 その1

    Android Wear | Android Developers Android Wear Design Principles Building Apps for Wearables | Training Android Wear APIAndroid Support Library と Google Play services で提供されているので、Kindle fire phone とかでは動かない。 Android Wear と接続するスマホは Android 4.3 以降であることが必要。 1. Synced Notifications 特にアプリ側で何もしなくても、スマホで発行された Notification は Android Wear にも表示されます。 2.x時代と違い、今はさまざまな情報を Notification に表示させられるため、通知の情報がリッチなほうが

  • Espresso で Preference をクリックさせる

    Matcher 書かないとダメっぽかったです。 PreferenceMatcher が用意されていたので利用しました。 import static com.google.common.base.Preconditions.checkNotNull; ... public class EspressoTest extends ActivityInstrumentationTestCase2<MainPreferenceActivity> { public EspressoTest() { super(MainPreferenceActivity.class); } @Override public void setUp() throws Exception { super.setUp(); // Espresso will not launch our activity for us, we

  • Android Javaコードで dp 単位を px 単位に変換する

    2023 (6) ► 12月 (1) ► 7月 (1) ► 5月 (1) ► 4月 (1) ► 3月 (2) ► 2022 (17) ► 12月 (2) ► 11月 (3) ► 9月 (2) ► 8月 (2) ► 7月 (2) ► 5月 (2) ► 4月 (2) ► 3月 (1) ► 2月 (1) ► 2021 (46) ► 12月 (2) ► 10月 (1) ► 9月 (1) ► 8月 (3) ► 7月 (2) ► 6月 (5) ► 5月 (12) ► 4月 (7) ► 3月 (5) ► 2月 (7) ► 1月 (1) ► 2020 (44) ► 12月 (6) ► 11月 (5) ► 10月 (1) ► 9月 (1) ► 8月 (2) ► 7月 (2) ► 6月 (7) ► 5月 (4) ► 3月 (8) ► 2月 (3) ► 1月 (5) ► 2019 (30) ► 12月 (8

  • In-app billing V3 は singleInstance な Activity では使えない

    Android launchMode の違い」 で解説したように、Activity には4つの launchMode が設定できます。 standard singleTop singleTask singleInstance それぞれの解説は上のエントリーに任せるとして、このなかの singleInstance を指定した Activity で In-app billing V3 の購入処理を行うとうまくいきません。 singleInstance はアプリでタスク1個、タスク内の Activity も1個というストイックな設定です。 In-app billing V3 の課金処理では、Activity の startIntentSenderForResult (IntentSender intent, int requestCode, Intent fillInIntent, int f

  • Android : Navigation Drawer を使う

    画面の左側にオーバーレイでアプリの主なオプションを表示するパネル。 通常は隠れていて、画面の左端からスワイプするか、トップレベルにいるならアクションバーのアイコンをタップすることで表示される。 http://developer.android.com/design/patterns/navigation-drawer.html より Navigation Drawer を使う前に、Navigation Drawer デザインガイドにあるこのパターンのユースケースとデザイン原則をきちんと理解すること。 Drawer Layout を作成する support package にある DrawerLayout を利用する。 DrawerLayout をルートビューとし、その中にメインのコンンテンツを表示するビューと、NavigationDrawer として利用するビューを入れる。 <androi

    Android : Navigation Drawer を使う
  • Google I/O 2013 - Android : Structure in Android App Design

    Structure in Android App Design 我々が"構造"について話すとき、それはどういう意味なのか。みなさんが最初に思いつくのは建築の図面ではないでしょうか?ここでの構造は、各スペースが何を意図しているものか決め、また行いたい活動をどうサポートするか提供します。構造は直接見えるものだけではありません。骨は私たちの体の構造を提供しています。骨により筋肉や内蔵を適切な場所に収めることができます。 "Does your app have good bones?" 我々のアプリケーションはこれらの例両方に似ています。空間を定義し、適切な場所に機能を取り付ける必要があります。 よく構造化されたアプリは少なくとも次の3つの特徴があります。 何かを行うのが簡単かつ効果的 家ではドアの幅は出入りするのに適切なサイズだし、床は硬いし、何かを行うのに適切な光量がある 関連する項目は一緒に

    Google I/O 2013 - Android : Structure in Android App Design
  • Android : Mobile Backend Starter のサンプルを試す

    Mobile backend starter はすぐにデプロイして使うことができるサンプル。 これを使うと、Android クライアント用のクラウドバックエンドを簡単に構築することができる。 また、バックエンドとやり取りする Android クライアント用のフレームワークと、それを利用したサンプルアプリも提供されているので、バックエンドとのやりとりをすぐ試すことができるし、フレームワークをどう使えばいいかもわかるので、自分の Android アプリに組み込む方法もわかる。 バックエンド側のコードはいっさい書かなくていいし、バックエンドのアクセス部分のコードはフレームワークとして提供されているので、アプリの機能や UI に集中できるというのが利点。 クライアント側のサンプルアプリとして GuestBook と SocialTalk というのがある。 このサンプルでは、Google Cloud

    Android : Mobile Backend Starter のサンプルを試す
  • ListView の header や footer をクリックさせないようにする

    ► 2024 (4) ► 6月 (1) ► 3月 (2) ► 2月 (1) ► 2023 (6) ► 12月 (1) ► 7月 (1) ► 5月 (1) ► 4月 (1) ► 3月 (2) ► 2022 (17) ► 12月 (2) ► 11月 (3) ► 9月 (2) ► 8月 (2) ► 7月 (2) ► 5月 (2) ► 4月 (2) ► 3月 (1) ► 2月 (1) ► 2021 (46) ► 12月 (2) ► 10月 (1) ► 9月 (1) ► 8月 (3) ► 7月 (2) ► 6月 (5) ► 5月 (12) ► 4月 (7) ► 3月 (5) ► 2月 (7) ► 1月 (1) ► 2020 (44) ► 12月 (6) ► 11月 (5) ► 10月 (1) ► 9月 (1) ► 8月 (2) ► 7月 (2) ► 6月 (7) ► 5月 (4) ► 3月 (8)

  • Support package の FragmentTransaction 時のアニメーションをセットする

    3.0 以降では FragmentTransaction 時のアニメーションとして "fragmentOpenEnterAnimation" などのスタイルが用意されているのですが、 Support package の FragmentTransaction 時のアニメーションではスタイルは参照されていません。 FragmentTransaction 時の Animation は FragmentManager の loadAnimation() メソッドで決まります。 このメソッド内のロジックは次のようになっています。 1. Fragment の onCreateAnimation() の戻り値の Animation インスタンスが null じゃなかったからそれを使う 2. onCreateAnimation() の第3引数で渡した Fragment の mNextAnim フィールド

  • SimpleDateFormat ではなく android.text.format.DateFormat を使おう

    SimpleDateFormat のパターン文字列だけをとるコンストラクタを使うと、Locale 指定しろよって Lint さんに怒られます。 android で用意されている DateFormat を使いましょう。 SimpleDateFormat と違って、format() に Calendar インスタンスを渡すことができます(Date インスタンスや inTimeInMillis(long)を渡すこともできます)。 Time Pattern Syntax は SimpleDateFormat とほぼ同じですが H の代わりに k を使うなど違いもあります。 String text = DateFormat.format("yyyy/MM/dd, E, kk:mm:ss", Calendar.getInstance()); textView.setText(text); DateFo

  • Android 3rd party のランチャーで直接 AppWidget を bind する

    Jelly Bean で AppWidget 関係にいろいろ手が入りました。 これまで 3rd party のランチャーに AppWidget を bind するには、AppWidgetManager.ACTION_APPWIDGET_PICK を呼び出して、AppWidget を選択する標準のダイアログを表示するしかありませんでした。 private void pickAppWidget() { int appWidgetId = mAppWidgetHost.allocateAppWidgetId(); Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); startAct

    Android 3rd party のランチャーで直接 AppWidget を bind する
  • Android 大きい画像を効果的に読み込む

    Loading Large Bitmaps Efficiently の内容なのですが、補足も入れてメモっておきます。 端的にいうと、 実際に表示するサイズより大きい Bitmap を読みこむのはメモリの無駄 (拡大させるとかなら話は別だけど) ・高解像度のカメラで取られた写真は往々にしてディスプレイのピクセルサイズより大きい ・サムネイルとして使うのに元のサイズのまま読み込むのはばかげてる ・大きいサイズの Bitmap をメモリに展開したら OutOfMemoryException になる ステップとしては3つ 1. メモリに Bitmap 展開せずに、サイズや MimeType だけを取得する 2. 1. の情報をもとにサブサンプルにサイズを決める 3. 2. で決めたサブサンプルで Bitmap をメモリに読み込む 1. メモリに Bitmap 展開せずに、サイズや MimeType

  • Android Bitmap をキャッシュする

    Caching Bitmaps に補足をつけて解説しています。 前回のバックグラウンドで Bitmap を処理するで、最後に(でもキャッシュは、、、?)と書きました。 そう!キャッシュ!キャッシュ大事。 前回までの段階でもまだ ListView で使うには問題が残っています。 既にタスクが走り終わって ImageView に画像がセットされている行をいったんスクロールアウトし、再度スクロールして画面に表示すると、またタスクが走ってしまいます。 スクロールするたびに読み込み状態になるのはユーザーとしてはうれしくないですよね。 そこでキャッシュを使って、一旦読み込んだ画像が再度必要になったときに利用できるようにします。 キャッシュとしてはメモリキャッシュとディスクキャッシュを利用することができます。 ■ メモリキャッシュ メモリキャッシュの利点は読み込みが速いこと、欠点はメモリを消費することで

  • Android バックグラウンドで Bitmap を処理する

    Processing Bitmaps Off the UI Thread の内容に補足を付けて解説してます。 前回のエントリーで大きい画像を効果的に読む込む方法を解説しましたが、デコードするデータがディスクやネットワークにある場合、BitmapFactory の decode* メソッドは UI スレッドで行ってはいけません(というかメモリ上以外のデータを読み込む場合は全部だめ)。 これらの処理はディスクやネットワークのスピード、画像のサイズ、CPUのパワーなどさまざまな要因で完了までの時間が変わり、いつ完了するのかわかりません。 もし画像のデコード処理で UI スレッドをブロックしてしまうと、最悪 ANR が発生します。 そこで、AsyncTask を使ってバックグランドで Bitmap を読み込むようにします。 ■ AsyncTask を使う 特に何も考えないで作ると、きっとこんな感じ