在Android中,如何将UI元素的高度转换为其高度的50%呢?

在Android中,如何将UI元素的高度转换为其高度的50%呢?,android,user-interface,Android,User Interface,我想将垂直轴上的相对布局平移其高度的50%。怎么做 <RelativeLayout android:id="@+id/rl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:translationY="50dp"> <!-- i tried 50% , .50. But it does not work. 如何操作?您无法在onCr

我想将垂直轴上的相对布局平移其高度的50%。怎么做

<RelativeLayout
    android:id="@+id/rl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:translationY="50dp"> <!-- i tried 50% , .50. But it does not work.

如何操作?

您无法在onCreate()中检索视图的高度。因为它还没有被测量和绘制。试试这个:

<RelativeLayout
    android:id="@+id/rl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:translationY="50dp"> <!-- i tried 50% , .50. But it does not work.
RelativeLayout rl = findViewById(R.id.RL);
    rl.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                public void onGlobalLayout() {
                    rl.getMeasuredHeight();
                }
            });

获得高度后,您可以随心所欲地使用它进行翻译。

Android有一些恼人的bug,让我们使用无用的黑客。为了获得onCreate中的高度,我使用了以下方法:

    var handler=Handler()
    handler.postDelayed(object:Runnable{
        override fun run() {
            findViewById<RelativeLayout>(R.id.toMove).y=findViewById<RelativeLayout>(R.id.toMove).y+(findViewById<RelativeLayout>(R.id.toMove).height/2)
        }
    }, 200)
var handler=handler()
postdayed(对象:Runnable{
覆盖趣味跑(){
findviewbyd(R.id.toMove).y=findviewbyd(R.id.toMove).y+(findviewbyd(R.id.toMove).height/2)
}
}, 200)

我知道这是一个200米的延迟,t不是最好的解决方案,但它很容易实现,工作正常。

在onCreate中,您无法检索布局的高度,我不记得为什么,但它与尚未绘制的视图或类似的内容有关。使用线性布局将UI划分为一个百分比。检查此处以获取高度:Try
weight
的可能重复项。您可以使用此选项为每个布局按所需百分比划分屏幕。