ImageButtonが2つあるとします。その状態に基づいてイメージを表示するには、各ImageButtonにセレクタxmlを書き込む必要があります。両方のビューに対して同じセレクターを記述できますか?私のアプリケーションにはたくさんのボタンがあり、ビューごとにセレクターxmlを記述する必要があるためです。最適化できますか?Android:2つ以上のビューに対して同じdrawable selector xmlを設定する方法
答えて
xmlファイルで試してみると、各ボタンの各セレクターを作成する必要があります。
だから、どちらかStateListDrawableをサブクラス化することにより、動的に実行しようとか、動的セレクタを作成:::
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pressed));
states.addState(new int[] {android.R.attr.state_focused},
getResources().getDrawable(R.drawable.focused));
states.addState(new int[] { },
getResources().getDrawable(R.drawable.normal));
imageView.setImageDrawable(states);
あなたは、ボタンのそれぞれのXMLセレクタを作成する必要はありません以下のコードを試してみてくださいフィットするものを再使用してください。セレクタと他の属性が同じである多くのボタンに対して、私のプロジェクトで次のコードを使用します。
<LinearLayout android:id="@+id/group_news" style="@style/main_button_group" >
<ImageView android:id="@+id/image_news" style="@style/main_button_image" android:src="@drawable/news" />
<TextView android:id="@+id/text_news" style="@style/main_button_text" android:text="@string/button_news" />
</LinearLayout>
(注:私は、コード内で画像を交換drawableLeftが正常に動作していなかった変更だので、私は、ImageViewのとdrawableLeft属性を持つのTextViewとないのTextViewでのLinearLayoutを使う)
そして解像度でのstyles.xmlを作成するには、\のようなそれらのボタンで同じであるすべてのattriburesでフォルダ値:描画可能/ main_button_states @
<resources>
<style name="main_button_group">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:orientation">horizontal</item>
<item name="android:layout_marginTop">2dp</item>
<item name="android:paddingTop">10dp</item>
<item name="android:paddingBottom">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:paddingLeft">25dp</item>
<item name="android:background">@drawable/main_button_states</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
</style>
<style name="main_button_image">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:contentDescription">@string/empty</item>
</style>
<style name="main_button_text">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">10dp</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:textSize">20dp</item>
<item name="android:textColor">@color/general_value</item>
</style>
</resources>
セレクタは次のようになります。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/main_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/main_button_focused" />
<item android:state_hovered="true" android:drawable="@drawable/main_button_focused" />
<item android:drawable="@drawable/main_button_normal" />
</selector>
これは完全に機能します。
しかし、すべてのセレクタを個別に作成する必要があります。すべてのセレクタコードを1つのファイルに書き込む方法もあれば、それらを再利用する方法もあります。 –
@DileepPerla、各セレクターは別ファイルです。ファイル名で識別します(_ @ drawable/main_button_states_は_drawable_フォルダの_main_button_states.xml_です) – infero
私はそれを入手しました。セレクタxmlを呼び出すことは私にとっては問題ではありません。セレクタxmlファイルの数を最適化したかっただけです。 –
- 1. spring(XML設定)で2つ以上のデータベースを使用する方法
- 2. 同じファイルを持つディレクトリに対してHeatDirectoryを2回以上行う方法?
- 3. 同じプロジェクトで2つのsymfonyアプリケーションを設定する方法
- 4. 同じデータベース内の2つ以上のテーブルに対して1つのエンティティsymfonyクラスを使用する
- 5. Android:同じバックスタック状態に2つ以上のフラグメントを追加する
- 6. 同時に2つ以上のスレッドを実行する方法
- 7. 同じ地図上に2つ以上の場所を表示
- 8. postWindowsデータベースからjsonObjectを使用してlistViewを設定する方法androidの2つ以上のフィールド
- 9. 2つ以上のサブセットを同じプロットに重畳する
- 10. Autolayout iOSを使用して2つのビューの上にビューを設定する方法
- 11. AndroidのImageViewに2つ以上の画像を設定するには
- 12. Android Type 7.0(nougat)以上のInputType.TYPE_CLASS_NUMBERに設定する方法
- 13. 2つ以上のiosデバイスでオーディオを同期する方法
- 14. 2つ以上のフォームを持つビュー
- 15. AndroidパフォーマンスXML Drawable対CSS3画像
- 16. androidで2つ以上のテキストチェンジリスナーを使用する方法
- 17. JavaFX:同じ位置にある2つ以上のペイン
- 18. QThreadから2つのクラスに対して同じシグナルを出す方法
- 19. AndroidデータベースoverWriting同じ行以上で
- 20. Rヒモマップ、2つのヒートマップ画像に同じスケールを設定する方法は?
- 21. 2つ以上のpythonファイルに同じGUIを接続
- 22. ウェブパック2に2つ以上のモジュールを非同期でロードする方法は?
- 23. 同じサーバ上で2つのsshを使用する方法
- 24. DotNetBrowserを使用して同じサブに2つ以上のファイルをダウンロード
- 25. ASP MVCで2つ以上のテーブルに値を設定する
- 26. 同じ設定の2つのHeaderValueRouters
- 27. 2つ以上のセルが他のセルに同じコンテンツを持つ場合、それらをマージする方法
- 28. 同じCamel RouteBuilderの設定方法で2つのRabbitMQ接続を設定する方法
- 29. イベントディスパッチスレッド(EDT)を2つ以上設定する方法はありますか?
- 30. 同じvhost上の2つの異なるドメインに対して、暗号化証明書を設定する方法は?
解決に感謝します。 –
素晴らしい作品です。また、XMLの場合と同様に、状態を結合したり否定することができます( " - ")。 so pressed = true checked = falseは次のように変換されます:states.addState(new int [] {android.R.attr.state_pressed、-android.R.attr.state_checked});参照:http://stackoverflow.com/questions/5092649 –
素晴らしい..! andriod.R.attr。*で利用可能な状態のリストがありますか? –