【问题标题】:Android: calling textview.setBackgroundResource twice changes the textview sizeAndroid:调用 textview.setBackgroundResource 两次更改 textview 大小
【发布时间】:2013-04-07 20:03:43
【问题描述】:

我有一个包含九个补丁的图像,我在 activity.onCreate() 期间为我的 textview 设置了背景。 Textview 具有高度+宽度的 WRAP_CONTENT 布局。它是由代码而非 XML 创建的。

_btnCurrent.setBackgroundResource(R.drawable.button_menu_off);

这很好用。 我有另一个九补丁图像,大小相同,唯一不同的是它的颜色。 现在,如果我稍后用另一张图片调用 setBackgroundResource,它将增加 textview 的高度,几乎加倍。另一个调用发生在 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);

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

【问题讨论】:

  • 您介意在这里放两张 9-patch 图像吗?
  • 第二张图片似乎有问题(button_menu_on)
  • 你能显示你的 textview 的 xml 部分吗?
  • @ArnaldoGaspar:我在 XML 中没有它,我从 onCreate() 中的代码创建 TextView。TextView retval = new TextView(this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.包装内容); retval.setBackgroundResource(R.drawable.button_menu_hs_off); retval.setTextColor(0xff000000); retval.setPadding(15, 5, 15, 5); retval.setGravity(Gravity.CENTER); retval.setText( GetString(id) ); retval.setOnClickListener(this);
  • @MoshErsan:第二张图片(白色)有什么问题?

标签: android resize textview background-image


【解决方案1】:

这看起来与我在填充时遇到的类似问题。调用setBackgroundResource 后,填充似乎发生了变化,而不是使用我在styles.xml 中配置的值。效果看起来好像大小改变了一样,但实际上是填充。

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

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

这不是很好,但很有效。

我希望这会有所帮助!

【讨论】:

  • 我刚刚找到了相同的解决方案,请参阅问题下的最后一条评论。是的,这就是问题所在,setBackgroundResource 破坏了填充。将此标记为解决方案
  • 但是您使用的是九个补丁,因此应将填充指定为图像的一部分。当 not 使用 Ninepatch... 时,您应该只在 XML 中或通过 setPadding() 指定填充
  • @ReubenScratton:这也是要考虑的事情......但是因为懒惰,使用setPadding() 比编辑图像更简单
  • @ReubenScratton 九个补丁中固有的填充是一回事,您可以在 content 周围添加的填充是另一回事。理想情况下,九个补丁应该有最小的填充,并让用户控制 xml 或 Java 代码中的填充。
  • 这太疯狂了,一定是一个错误,这不是故意的。无论如何,我遇到了同样的问题,但是当我为RelativeLayout 设置背景资源时,这很奇怪,因为我认为这些东西不能有任何填充。无论如何,在设置资源修复它之后调用setPadding(0,0,0,0)
猜你喜欢
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多