Android:调用textview.setBackgroundResource两次更改textview大小

Zot*_*tyi 3 android resize background-image textview

我有一个贴有九个补丁的图像,我在activity.onCreate()期间设置了textview的背景。Textview具有WRAP_CONTENT布局,用于高度和宽度。它是通过代码而不是XML创建的。

_btnCurrent.setBackgroundResource(R.drawable.button_menu_off);
Run Code Online (Sandbox Code Playgroud)

这很好。我还有另外一张九幅图像,大小相同,唯一的区别是颜色。现在,如果以后再用其他图像调用setBackgroundResource,它将增加textview的高度,几乎增加一倍。另一个调用来自textview.onClick()

_btnCurrent.setBackgroundResource(R.drawable.button_menu_on);
Run Code Online (Sandbox Code Playgroud)

如果我再次调用它(在文本视图中再次单击),则没有任何效果。这很好,我想它也会在第一次点击时发生。所以:

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
Run Code Online (Sandbox Code Playgroud)

我试图设置_btnHSCurrent.setBackgroundResource(0); 设置新图像之前,但这无济于事。

为什么会这样?

@编辑

我做了:_btnCurrent.setBackgroundResource(R.drawable.button_menu_off); 在Activity.onCreate()期间。

然后在textview.onClick()中,我调用:

_btnCurrent.setBackgroundResource(R.drawable.button_menu_on);

这会使高度加倍。再次单击,仅在第一次单击时,不再更改大小。

在此处输入图片说明 在此处输入图片说明

Sto*_*ica 5

这看起来像我在填充时遇到的类似问题。调用setBackgroundResource填充后,似乎已更改,未使用在中配置的值styles.xml。效果看起来好像大小已更改,但实际上是填充。

我的解决方法是setPadding在更改背景后调用按钮,例如:

button.setBackgroundResource(R.drawable.btn_add);
button.setPadding(10, 15, 10, 15);
Run Code Online (Sandbox Code Playgroud)

这不是很好,但是可以。

我希望这有帮助!