スキップしてメイン コンテンツに移動

Android CheckBoxをxmlでカスタマイズ

やりたい事、
  • 自前のチェックボックス画像にしたい
  • タッチした時だけ背景色を変更
分かればなんて事ないんですが....
後者は動的にやると、OnTouchListenerを使ってMotionEvent.ACTION_DOWNで背景を変更し、MotionEvent.ACTION_UPで背景を戻すというコードを書かなければならないのですが、XMLで書くとコード中で余計な事(onTouchメソッドのreturn値とか)を気にしなく良くなるので、スマートだと思います。




まず、

自前のチェックボックス画像にしたい

以下の二つの画像を用意します。

box_kara.png

box_peke.png

これを、resのdrawableディレクトリに配置。
xmlファイルを作成して、以下のように記述

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 未チェック -->
    <item
        android:state_checked="false"
        android:drawable="@drawable/box_kara" />

    <!-- チェック済み -->
    <item
        android:state_checked="true"
        android:drawable="@drawable/box_peke" />

</selector>

配置はこんな感じ


これを、チェックボックスのプロパティのButtonに配置してやればおk



上記の画像でチェックボックスが変ります。


これを応用して、それぞれ反転した画像を追加してこんな風にすると、

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 未チェック時 -->
    <item
        android:state_checked="false"
        android:state_pressed="false"
        android:drawable="@drawable/box_kara" />

    <!-- 未チェック押下時 -->
    <item
        android:state_checked="false"
        android:state_pressed="true"
        android:drawable="@drawable/box_kara2" />

    <!-- 押下後 -->
    <item
        android:state_checked="true"
        android:state_pressed="false"
        android:drawable="@drawable/box_peke" />

    <!-- チェック済み押下時 -->
    <item
        android:state_checked="true"
        android:state_pressed="true"
        android:drawable="@drawable/box_peke2" />
</selector>

上から順に、

  1. 未チェック時

  2. 未チェック押下時

  3. 押下後

  4. チェック済み押下時


のように細かく変更する事もできます。

タッチした時だけ背景色を変更

同じようにDrawableディレクトリ配下にxmlファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 通常-->
    <item android:state_pressed="false" >
        <color android:color="#FFF" />
    </item>

    <!-- 押下時 -->
    <item android:state_pressed="true">
        <color android:color="#55FF0000" />
    </item>

</selector>

これを、チェックボックスのプロパティのBackgroundに設定します。


これで、押下時のみ背景色が薄赤色にかわります。


Button用とBackground用の2つXMLファイルを用意してやるってとこがポイントですね。

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。