2

デフォルトの画像を持つボタンを作成しようとしていますが、ボタンを押すと新しい画像に切り替わります。私はthis tutorial一緒に使用しましthis questionたが、うまくいきません。

これは私のinfo_button_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details" /> <!-- default -->
</selector>

これは私のImageButtonのコードです:

                <ImageButton
                    android:id="@+id/apModeInfoButton"
                    android:layout_width="0dip"
                    android:background="@null"
                    android:layout_height="match_parent"
                    android:layout_weight="1.15"
                    android:clickable="true"
                    android:src="@drawable/info_button_selector" />

ボタンはずっと初期状態のままic_menu_info_detailsです。

info_button_selector.xmlファイルを次のように変更しました。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details2" /> <!-- default -->
</selector>

画像はずっと表示されていましたic_menu_info_details2が、これは予想通りです。これは、ボタンが描画可能なリソースとして XML ファイルを使用していることを示していますが、ボタンを押しても画像が変わらないのはなぜでしょうか?

編集

以下の Joss の回答を使用しても、画像は変わらず、奇妙な方法で引き伸ばされます。注: 2 番目の画像がサイズの 60% にスケーリングされていることを除いて、両方の画像はまったく同じです。これは機能していることを意味している可能性がありますが、ビューが引き伸ばされているためわかりません。

                <ImageButton
                    android:id="@+id/apModeInfoButton"
                    android:layout_width="0dip"
                    android:layout_height="match_parent"
                    android:layout_weight="1.15"
                    android:clickable="true"
                    android:background="@drawable/info_button_selector" />

これらの XML ファイルの両方のバージョンと、画像のさまざまな組み合わせを使用しました。すべての組み合わせで、同じサイズの画像が変化することはありませんでした。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/ic_menu_info_details" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details" /> <!-- default -->
</selector>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details2" /> <!-- default -->
</selector>
4

2 に答える 2

4

そのドローアブルをsrcではなくImageButton背景に設定します。

 <ImageButton
          android:id="@+id/apModeInfoButton"
          android:layout_width="0dip"
          android:background="@drawable/info_button_selector"
          android:layout_height="match_parent"
          android:layout_weight="1.15"
          android:clickable="true" />

歪みの問題をフォローアップするために編集します。

あなたができることは、レイヤーを分離することです。

背景は伸縮可能なので、これを Background に設定し、伸縮してはいけない画像を分離し、これを SRC に設定します。

<ImageButton
         android:id="@+id/apModeInfoButton"
         android:layout_width="0dip"
         android:src="@drawable/non_scaleable_image"
         android:background="@drawable/gradient_bg"
         android:layout_height="match_parent"
         android:layout_weight="1.15"
         android:clickable="true" />

このようにして、背景をグラデーションとして使用し、品質を損なうことなく引き伸ばすことができ、SRC 画像のサイズ変更や歪みは発生しません。

それが実際に ImageButton を使用する目的です。

または、最初の回答で提案したことを行いますが、代わりにボタンを使用してください。これが役立つかどうか教えてください。

于 2013-02-04T15:40:30.600 に答える
1

詳細2については、完成した別の画像を使用してみて、画像が実際に変更されているが、サイズが変更されていないかどうかを確認する必要があります。ステートフルボタンのサイズが変更されるとは思いません。おそらく、2つの異なる画像を使用して、可視性を設定します。

于 2013-02-04T16:10:34.020 に答える