Button的高度会自动改变android

时间:2013-07-03 17:41:05

标签: android button layout height

我有一个带有LinearLayout的活动,其中水平排列的按钮,一个水平定向的TextViews的LinearLayout,一个gridview和一个TextView。 第一个LinearLayout有3个按钮,其中一个最初的可见性设置为“GONE”。 LinearLayout必须具有2/28的权重,它最初具有,但是当第3个按钮出现时,它会完全重塑。我还提到,当我在更大的屏幕上测试时,比例保持不变,一切都很完美。使用的绘图是一个简单的形状,圆角和笔划。

    <!-- this button is initially set as GONE and then it changes his height -->
            <Button 
                android:id="@+id/previous"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_gravity="end"
                android:gravity="center"
                android:background="@drawable/button"
                android:layout_marginRight="10dp"
                android:text="@string/previous"
                android:textColor="#606060"
                android:textStyle="bold"
                android:textSize="20sp"
                android:hint="Previous"/>

<!-- This button is visible from the very beginning, with the correct height -->
            <Button 
                android:id="@+id/next"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_gravity="end"
                android:gravity="center"
                android:background="@drawable/button"
                android:text="@string/next"
                android:textColor="#606060"
                android:textStyle="bold"
                android:textSize="20sp"
                android:hint="Next"/>
            </LinearLayout>

我提到我以编程方式设置可见性,它具有任何相关性:

_previous.setVisibility(GONE);

_previous.setVisibility(VISIBLE);

知道为什么会发生这种情况,我该如何解决?

以下两张照片可以更好地描绘我的想法: Img1 Img2 谢谢!

2 个答案:

答案 0 :(得分:1)

我设法通过获取LayoutParams并将高度设置为屏幕的2/28来解决问题,因为它应该是从第一次开始,现在它就像魅力一样。 以下是源代码:

DisplayMetrics _metrics = getResources().getDisplayMetrics();
int _height = _metrics.heightPixels; //height of the screen

LayoutParams _layoutParamsButton = (LayoutParams) _previous.getLayoutParams(); 
_layoutParamsButton.height = _height/28*2;
_previous.setLayoutParams(_layoutParamsButton);     

答案 1 :(得分:0)

我不明白你的意思

_previous.setVisibility(GONE); and respectively _previous.setVisibility(VISIBLE);

我认为您的意思是隐藏了View.GONE按钮,并将其显示为View.VISIBLE

您了解View.GONEView.INVISIBLE之间的区别吗?

View.GONE会使布局自行测量,就像按钮从不存在一样。 View.INVISIBLE会导致布局自行测量,包括按钮但不会在屏幕上显示。如果您最初将其设置为View.GONE,然后将其设置为View.VISIBLE,则会重新测量整个布局并重新绘制。

在不理解您的问题的情况下,我猜您应该在代码中使用View.INVISIBLEView.VISIBLE

您还应该在XML中使用android:visibility="invisible"作为初始状态。