Android:调用textview.setBackgroundResource两次会更改textview的大小
我有一个九个补丁的图像,我在activity.onCreate()期间为textview设置了背景。Textview具有高度+宽度的换行内容布局。它是从代码创建的,而不是从XML创建的Android:调用textview.setBackgroundResource两次会更改textview的大小,android,resize,textview,background-image,Android,Resize,Textview,Background Image,我有一个九个补丁的图像,我在activity.onCreate()期间为textview设置了背景。Textview具有高度+宽度的换行内容布局。它是从代码创建的,而不是从XML创建的 _btnCurrent.setBackgroundResource(R.drawable.button_menu_off); 这个很好用。 我还有一张九个补丁的图片,同样大小,唯一的区别是它的颜色。 现在,如果我稍后使用另一个图像调用setBackgroundResource,它将增加textview的高度,几
_btnCurrent.setBackgroundResource(R.drawable.button_menu_off);
这个很好用。
我还有一张九个补丁的图片,同样大小,唯一的区别是它的颜色。
现在,如果我稍后使用另一个图像调用setBackgroundResource,它将增加textview的高度,几乎是原来的两倍。另一个调用发生在textview.onClick()中
如果我再次调用它(在文本视图中再次单击),则没有效果。这很好,我想第一次点击也是这样。
因此:
我试图设置_btnHSCurrent.setBackgroundResource(0);设置新图像之前,但没有帮助
为什么会发生这种情况
@编辑
我做到了:
_btncCurrent.setBackgroundResource(R.drawable.button\u menu\u off);在Activity.onCreate()期间
然后在textview.onClick()中,我调用:
_btncCurrent.setBackgroundResource(R.drawable.button\u菜单打开)
这将使高度加倍。再点击一次,再点击一次,再点击一次,不再改变尺寸,只在第一次点击时
这看起来像是我在填充方面遇到的类似问题。调用
setBackgroundResource
后,填充似乎发生了变化,没有使用我在styles.xml
中配置的值。其效果看起来与大小已更改一样,但实际上是填充
我的解决方法是在更改背景后调用按钮上的setPadding
,例如:
button.setBackgroundResource(R.drawable.btn_add);
button.setPadding(10, 15, 10, 15);
这不太好,但很管用
我希望这有帮助 你介意在这里放两个9补丁图像吗?第二个图像(按钮菜单打开)似乎有问题。你能显示textview的xml部分吗?@ArnaldGaspar:我没有xml格式,我是从onCreate()中的代码创建textview的。
textview retval=new textview(这个)代码>LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容)<代码>retval.setBackgroundResource(R.drawable.button\u菜单\u hs\u关闭)代码>retval.setTextColor(0xff000000)<代码>retval.setPadding(15,5,15,5)代码>返回设置重力(重心)<代码>retval.setText(GetString(id));
retval.setOnClickListener(这个)@莫斯山:第二张图片(白色)有什么问题?我刚刚找到了同样的解决方案,请看我在问题下的最后一句评论。是的,这就是问题所在,setBackgroundResource
破坏了填充。将此标记为解决方案但您使用的是九个匹配,因此应将填充指定为图像的一部分。您只需在不使用NeNePATCH……RuuBeScEnton时指定XML中的填充或通过SETPADION(…)@ RuuBeScEnton:这也是一个需要考虑的问题……但是懒惰,使用<代码> SETPADDION()/<代码>比编辑更简单。images@ReubenScratton九块补丁中固有的填充是一回事,您可以在内容周围添加的填充是另一种。理想情况下,九补丁应该有最小的填充,并让用户控制xml或Java代码中的填充。这太疯狂了,一定是个bug,这不是故意的。无论如何,我也遇到了同样的问题,但那是当我为RelativeLayout
设置后台资源时,这很奇怪,因为我认为这些东西不能有任何填充。在任何情况下,在设置资源后调用setPadding(0,0,0,0)
都可以修复它!
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
button.setBackgroundResource(R.drawable.btn_add);
button.setPadding(10, 15, 10, 15);