3

アプリにいくつかのImageButtonがあり、デフォルトの灰色の背景を削除しました

android:background="@android:color/transparent"またandroid:background="@null"

問題は、onClickハイライトの背景(API8ではオレンジ、API16では青)も削除されることです。

ここでたくさんのQ&Aを読んだので、みんなが使用を提案してselectorいます。ボタンごとに別の画像を作成するのではなく、背景色のみを強調表示したいと思います。これを達成する簡単な方法はありますか?

解決策:プログラムで

android.view.Viewをインポートします。
import android.view.View.OnTouchListener;

//..。

btn.setOnTouchListener(new OnTouchListener(){
    @オーバーライド
    public boolean onTouch(View v、MotionEvent event){
        if(event.getAction()==(MotionEvent.ACTION_DOWN)){
            //背景のハイライト色を設定します
            btn.setBackgroundResource(R.color.blue);
        }
        if(event.getAction()==(MotionEvent.ACTION_UP)){
            //透明に復元
            btn.setBackgroundResource(
                getResources()。getColor(android.R.color.transparent));
        }
        falseを返します。
    }
});

それはそれほど単純ではありません、仕事をして、ボタンごとに別の画像を作成する時間を大幅に節約しますが、派手なonclickスタイルは本当に必要ありません。

4

4 に答える 4

5

この場合、関連する属性は2つだけです-backgroundsrc。すべての画像ボタン(カラーハイライト付き)に同じ背景を使用する場合は、ボタンごとに変化する背景の部分を、によって設定された画像に追加する必要がありますsrc。これは、あまりきれいではありません(もちろん、必要に応じてそれを行うことができます)。

したがって、多くのユーザーから提案されているように、ここでの最善の方法は、バックグラウンドにセレクターを使用することだと思います。

次のコードを使用します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/holo_blue_light" android:state_pressed="true"/>
    <item android:drawable="@android:color/transparent"/>
</selector>
于 2013-01-15T21:00:05.663 に答える
4

あなたは本当にこれのためにセレクターを使う必要があります。

セレクターで背景に色を使用できます。PNGリソースである必要はありません(描画可能なリソースではなく、背景を色に設定するだけです)。

このコードを、特定の名前(button_sel.xmlなど)でドローアブルフォルダーに配置します。

次に、これをXMLのボタンの背景として設定すると、次のようになります。

android:background="@drawable/button_sel"

セレクターは次のようになります。

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/ab_background"
        android:state_focused="true"
        android:state_pressed="true"/>
    <item
        android:drawable="@color/ab_background"
        android:state_focused="false"
        android:state_pressed="true"/>
    <item
        android:drawable="@color/ab_background_on"
        android:state_focused="true"
        android:state_pressed="false"/>
    <item
        android:drawable="@color/ab_background_on"
        android:state_focused="false"
        android:state_pressed="false"/>
</selector>
于 2013-01-15T21:11:20.757 に答える
0

そうは思わないでください。コードをコピーしてセレクターを必要な方法で変更するよりも、APIを検索してImageButtonの事前定義されたセレクターを見つけることができます。したがって、カスタムImageButtonを作成します。

でも、色を変えるだけで欲しかったのと同じように、簡単な方法はないと思います

于 2013-01-15T20:59:03.740 に答える
0

私は同じ問題を抱えていますが、今は解決されています。使用している場合はandroid:background="@null、背景がまったく表示されず、ボタンが押されたアニメーションがユーザーに表示されません。

このコード行を追加するだけで、クリックすると画像ボタンが点滅します。これは、画像ボタンがクリックされたことをユーザーに警告する適切な方法です。

 android:background="?android:selectableItemBackground
于 2016-10-18T02:15:15.400 に答える