在Android中,如何将UI元素的高度转换为其高度的50%呢?
我想将垂直轴上的相对布局平移其高度的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
<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
的可能重复项。您可以使用此选项为每个布局按所需百分比划分屏幕。