动态更改按钮的宽度在Android的

问题描述:

我的问题很简单,我试图以动态地改变这个按钮的宽度:动态更改按钮的宽度在Android的

按钮>的android:layout_height =“35dip”机器人:背景= “@ drawable/buttonlesson”android:text =“Level 3 [TAP HERE]”android:onClick =“MenuLI1L3”android:layout_width =“300dp”android:id =“@ + id/II3”> /按钮“

这里是我使用的代码:

Button myButton = (Button) findViewById(R.id.II3); 
myButton.setWidth(10); 
myButton.setText("kl"); 

文本确实会改变,但不是宽度。听起来像是有一个错误。 右侧有另一个按钮,当该按钮缩小到10像素时,该按钮可以填补空白,所以我也无法更改上面的Linearlayout。

任何解释&解决方案?它应该没有工作?谢谢

建议尝试在父视图上调用invalidate()(这会导致对所有子项(包括按钮)的绘图调用)。这可能不起作用,因为您还需要按钮重新运行其onMeasure()逻辑(它在绘图之前运行)。

玩耍无效或任何其他方法,这将导致父母调用子的onMeasure。

+2

感谢您的建议!在图层上或按钮上的无效()虽然没有做任何事情....但myButton.bringToFront();以某种方式解决。 – Simon 2011-04-19 05:49:31

+0

我还没有玩过bringToFront(),但我不禁想知道它是否导致按钮来运行它的onMeasure()?那么,至少你是起来工作。做得很好。 – BonanzaDriver 2011-04-19 15:14:11

我认为wrap_content不适用于你的具体情况,对不对? 如果你需要绝对的宽度,那么你需要分配一个通过new LayoutParameters,即

myButton.setLayoutParams(new LinearLayout.LayoutParams(
    30 * someDensityFactor, LinearLayout.LayoutParams.WRAP_CONTENT 
)) 

其中someDensityFactor是您的屏幕密度(浮动)。您也可能需要使您的布局无效,然后才能重新绘制按钮。

+0

感谢提示,当我这样做,但它实际上使应用程序崩溃... – Simon 2011-04-19 05:47:11