ボーダーレスボタンにボーダーを追加したい。ただし、親のフチなしボタンを使用して独自のスタイルを作成し、背景タグを上書きすると、状態変更アニメーションなどが失われます。これも背景によって定義されるためです。また、ネイティブのandroidドロアブルは公開されていないため、アクセスできないため、自分で実装することもできません。ドローアブルをコピーする必要はありません。プログラマティックに上書きすることだけが可能ondraw
ですか、それとも私が見逃しているxmlベースのソリューションがありますか?(ところで、これは周期表のためのものなので、ボタンごとにxmlファイルを用意する必要はありません。ボタンは約100個あるからです)ありがとうstephan
2 に答える
これの大部分はこの記事から来ています。
このようなことを行うには、4つのステップのプロセスがあります。
- 状態を含むXMLファイルを作成します。
- 状態ごとにXMLファイル(またはバックグラウンド)を作成します
- ボタンのスタイルを作成する
- ボタンをレイアウトに追加して、どのように表示されるかを確認します。
最も難しいのは最初のステップなので、ここでそれを示します。他のものについては、あなたはサイトを訪問するか、あなた自身のことをすることができます。基本的には、このようになります。基本的に、4つの状態すべてをキャプチャする必要があります。これはドローアブルフォルダに保存する必要があります。この名前は、アプリケーションがドローアブルの名前に使用する名前です。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/loc_for_button_disabled" />
<item
android:state_pressed="true"
android:state_enabled="true"
android:drawable="@drawable/loc_for_button_pressed" />
<item
android:state_focused="true"
android:state_enabled="true"
android:drawable="@drawable/loc_for_button_focused" />
<item
android:state_enabled="true"
android:drawable="@drawable/loc_for_button_enabled" />
</selector>
簡単な方法は、ボタンを別のレイアウト(たとえば、a)内に配置し、LinearLayout
このレイアウトに背景色とたとえば1dpのパディングを与えることです。これにより、ボタンの周囲に「境界線」が表示されます。これはレイアウトに関して非常にコストがかかることに注意してください。ボタンがたくさんある場合は、この方法を使用しないでください。
正しい解決策は、すべての状態に対して1つのドローアブルを作成し、ドローアブルを使用してステートリストドローアブルを作成し、このステートリストドローアブルをボタンの背景として割り当てることです。実際にはそれほど多くの作業ではありません。http://developer.android.com/guide/topics/resources/drawable-resource.html#StateListをご覧ください。