Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:调用textview.setBackgroundResource两次会更改textview的大小_Android_Resize_Textview_Background Image - Fatal编程技术网

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

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的高度,几

我有一个九个补丁的图像,我在activity.onCreate()期间为textview设置了背景。Textview具有高度+宽度的换行内容布局。它是从代码创建的,而不是从XML创建的

_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);