我正在尝试使用布局和重力属性将视图置于不同分辨率的中心,但它无法正常工作。有没有办法让自定义视图中心水平跨越不同的分辨率?
我是否需要对onMeasure方法做点什么?
这是我现在正在尝试的事情之一,视图位于中心的左侧..
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp"
android:gravity="center_horizontal">
<com.application.app.ui.CustomView
android:id="@+id/ivCoinAnimation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>
</FrameLayout>
答案 0 :(得分:1)
假设您在View
等布局中有FrameLayout
,则可以将View
&#39; layout_gravity
设置为center
。不要将其与gravity
混合起来!
此外,确实可能需要覆盖onMeasure()。阅读it's documentation以确定是否需要覆盖它。如果这样做,请注意参数是使用View.MeasureSpec
编码的。
答案 1 :(得分:0)
您应该在自定义View类中实现
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
在其中,您应该计算自定义视图的高度和宽度。
如果您需要在父级布局中集中自定义视图 - 请确保:
和/或
例如:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int height = mCircleRadius * 2; //calculated
final int width = getMeasuredWidth(); //parent width
setMeasuredDimension(width, height);
}
现在您可以使用next作为自定义视图:
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
P.S。您看到android:layout_centerHorizontal="true"
没有效果。原因是在 onMeasure 中使用父级宽度,而不是计算精确宽度。
答案 2 :(得分:-1)
以下是如何将两个按钮置于屏幕中心的示例。这也适用于您的CustomView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="Button" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>
</LinearLayout>