1

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

    <!-- 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 谢谢!

4

2 回答 2

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);     
于 2013-07-04T12:02:17.293 回答
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.INVISIBLEand View.VISIBLE

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

于 2013-07-03T17:54:58.270 回答