我有一个带有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);
知道为什么会发生这种情况,我该如何解决?
答案 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.GONE
和View.INVISIBLE
之间的区别吗?
View.GONE
会使布局自行测量,就像按钮从不存在一样。 View.INVISIBLE
会导致布局自行测量,包括按钮但不会在屏幕上显示。如果您最初将其设置为View.GONE
,然后将其设置为View.VISIBLE
,则会重新测量整个布局并重新绘制。
在不理解您的问题的情况下,我猜您应该在代码中使用View.INVISIBLE
和View.VISIBLE
。
您还应该在XML中使用android:visibility="invisible"
作为初始状态。