2013-04-07 69 views
1

我有一个九贴图像,它在activity.onCreate()期间为我的textview设置了背景。 Textview具有高度+宽度的WRAP_CONTENT布局。它是从代码创建的,而不是从XML创建的。Android:调用textview.setBackgroundResource两次可更改文本视图大小

_btnCurrent.setBackgroundResource(R.drawable.button_menu_off); 

这工作正常。 我有其他九修补的图像,相同的大小,唯一的区别是它的颜色。 现在,如果稍后使用其他图像调用setBackgroundResource,它将增加textview的高度,几乎翻倍。这其他呼叫从textview.onClick()

_btnCurrent.setBackgroundResource(R.drawable.button_menu_on); 

如果我再次调用它(在TextView中再次单击),没有效果发生。这很好,我想这也是第一次点击发生的情况。 所以:

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);在设置新图像之前,但没有帮助。

为什么会发生这种情况?

@Edit

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

然后在textview.onClick(),I拨打:

_btnCurrent.setBackgroundResource(R.drawable.button_menu_on);

这会使身高增加一倍。再次单击再次,不会再改变尺寸,仅在第一次点击。

enter image description here enter image description here

+0

你介意把这里放到两张9贴图片上吗? – 2013-04-07 11:16:11

+0

似乎你的问题与第二张图片(button_menu_on) – 2013-04-07 11:24:08

+0

你可以显示你的textview的XML部分? – 2013-04-07 11:28:28

回答

2

这看起来像一个类似的问题,我曾与填充。在调用setBackgroundResource之后,填充似乎会改变,而不是使用我在styles.xml中配置的值。效果看起来像大小已经改变一样,但实际上它是填充。

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

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

这不是很大,但它的工作原理。

我希望这有助于!

+0

我只是发现了同样的解决方案,看到我在问题的最后评论。是的,这是问题,'setBackgroundResource' 遗址填充。将此标记为解决方案 – Zotyi 2013-04-07 12:05:15

+0

但是,您正在使用九个修补程序,因此应该将填充指定为图像的一部分。你应该只指定填充XML或通过setPadding()当*不*使用ninepatch ... – 2013-04-07 12:39:22

+0

@ReubenScratton:这也是需要考虑的事情......但是懒惰它比'setPadding()'更简单地玩,而不是编辑图片 – Zotyi 2013-04-07 12:46:23

相关问题