簡単なオリジナルボタンの作り方
Androidでボタンを使いたいときデフォルトのボタンを使うと背景が灰色で色を変えようと思って
android:background="#f00"
上のような感じで赤にしようとしても思った通りのボタンができないのではないだろうか。しかもボタンを押しても反応が見られない。
この時にどうすればいいのか色々ググってたら簡単な方法で丸みを出したり、背景の色にグラデーションをかけたり、ボタンが押されたときの挙動も設定することができることがわかった。
やり方は「res」フォルダの中のdrawableフォルダの中にボタンの背景に使うxmlファイルを作ればいい。
やり方は以下の通り
res/drawable/original_button.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- ボタンが押されている --> <item android:state_pressed="true" android:state_focused="false"> <layer-list> <item> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="270" android:startColor="#00E000" android:centerColor="#00C100" android:endColor="#00FF00" android:type="linear" /> <corners android:radius="2dip" /> <stroke android:width="0.75dip" android:color="#000000"/> </shape> </item> </layer-list> </item> <!-- ボタンが押されていない --> <item android:state_pressed="false" android:state_focused="false"> <layer-list> <item> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="270" android:startColor="#00FF00" android:centerColor="#00C100" android:endColor="#00E000" android:type="linear" /> <corners android:radius="2dip" /> <stroke android:width="0.5dip" android:color="#000000"/> </shape> </item> </layer-list> </item> </selector>
コメントを見てもらえればわかると思うが
android:state_pressed
のところの値が「true」「false」でボタンを押しているのか押していないのか判断している。
layer-listタグの中ののitemタグの中をを見ると「shape」「corners」「stroke」の3つのタグがある。
それぞれ何をしているかというと
- shape
- angle・・・グラデーションをかける方向
- startColor・・・グラデーションかけるときの始まりの色
- centerColor・・・グラデーションかけるときの真ん中の色
- endColor・・・グラデーションかけるときの終わりの色
- type・・・これはちょっと調べてないのでわからないです
- corners
- radius・・・角を丸くする度合い
- stroke
- width・・・ボタンの外枠の太さ
- color・・・ボタンの外枠の色
そしてボタンにこのファイルを背景として設定してあげるとオリジナルのボタンが出来る。
android:background="@drawable/original_button"
Javaファイルで設定してあげたい場合は
another_login_button.setImageResource(R.drawable.congratulation_twitter_button_selector);
これで完成。
しかもこれをするとボタンでなくともLinearLayoutなどのViewクラスならbackgroundで指定してclickableの属性を「true」にすればButtonでなくてもボタンになる。