4

activity.onCreate() 中に textview の背景を設定した 9 パッチの画像があります。Textview には、高さ + 幅の両方に WRAP_CONTENT レイアウトがあります。XML からではなく、コードから作成されます。

_btnCurrent.setBackgroundResource(R.drawable.button_menu_off);

これはうまくいきます。同じサイズの別の 9 パッチ画像がありますが、違いは色だけです。後で他の画像で setBackgroundResource を呼び出すと、テキストビューの高さがほぼ 2 倍になります。この他の呼び出しは textview.onClick() から発生します

_btnCurrent.setBackgroundResource(R.drawable.button_menu_on);

もう一度呼び出しても(テキストビューでもう一度クリックしても)、効果はありません。これは良いことです。最初のクリックでも同じことが起こると思います。そう:

Activity.onCreate()
{
    btnCurrent= new TextView(this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    btnCurrent.setBackgroundResource(R.drawable.button_menu_hs_off);

    btnCurrent.setPadding(15, 5, 15, 5);
    btnCurrent.setGravity(Gravity.CENTER);

    btnCurrent.setText( GetString(id) );        
    btnCurrent.setOnClickListener(this);

}

onClick()
{
    _btnCurrent.setBackgroundResource(R.drawable.button_menu_on);
}


onCreate();  // -> called by Android during startup -> OK
....
onClick();   // called when user clicks on it -> btnCurrent has double height
....
onClick();   // called when user clicks again -> btnCurrent has same double height, no change in size
....
onClick();   // called when user clicks again -> btnCurrent has same double height, no change in size

_btnHSCurrent.setBackgroundResource(0); を設定しようとしました。新しい画像を設定する前に、しかし助けにはなりません。

なぜこれが起こるのですか?

@編集

私がやった: _btnCurrent.setBackgroundResource(R.drawable.button_menu_off); Activity.onCreate() 中。

次に、textview.onClick() で次のように呼び出します。

_btnCurrent.setBackgroundResource(R.drawable.button_menu_on);

これにより、高さが2倍になります。何度も何度もクリックしてもサイズは変わらず、最初のクリックだけです。

ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1

6

これは、パディングで発生した同様の問題のようです。パディングを呼び出しsetBackgroundResourceた後、で構成した値を使用せずに、パディングが変更されたようですstyles.xml。サイズが変わったかのように見えますが、実際はパディングです。

setPadding私の回避策は、背景を変更した後にボタンを呼び出すことです。次に例を示します。

button.setBackgroundResource(R.drawable.btn_add);
button.setPadding(10, 15, 10, 15);

それは素晴らしいことではありませんが、うまくいきます。

これが役立つことを願っています!

于 2013-04-07T12:01:25.607 に答える