gpt4 book ai didi

android - 父中心不适用于自定义相对布局

转载 作者:行者123 更新时间:2023-11-30 00:54:47 25 4
gpt4 key购买 nike

我正在尝试创建基于相对布局的自定义布局“SquareBox”,以将 ImageView 居中。并且此自定义布局将始终为正方形大小(取决于 ImageView 的高度和宽度)。

protected void onMeasure(int width, int height) {
super.onMeasure(width, height);
int measuredWidth = getMeasuredWidth();
int measuredHeight = getMeasuredHeight();
int size;
if (measuredWidth > measuredHeight) {
size = measuredWidth;
} else {
size = measuredHeight;
}
setMeasuredDimension(size, size);
}

这是我的布局代码:

  <com.example.tools.SquareBox
android:id="@+id/square_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:background="@android:color/darker_gray">

<ImageView
android:id="@+id/canvas_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
tools:src="@drawable/demo_image" />
</com.example.tools.SquareBox>

它工作正常,但 ImageView 不在这个自定义 View 的中心。我试过以下:->android:layout_centerInParent="true"用于 ImageView。

->android:gravity="center"for "SquareBox".

->在 SquareBox 的 onMeasure 方法中以编程方式将 CENTER_IN_PARENT 添加到 ImageView。

但没有任何效果。我在这里缺少什么?

最佳答案

将您的布局更改为此(将 layout_width 更改为 match_parent):

<com.example.tools.SquareBox
android:id="@+id/square_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:background="@android:color/darker_gray">

<ImageView
android:id="@+id/canvas_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
tools:src="@drawable/demo_image" />
</com.example.tools.SquareBox>

并将您的自定义布局更改为:

  @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);

int size;
if(widthMode == MeasureSpec.EXACTLY && widthSize > 0){
size = widthSize;
}
else if(heightMode == MeasureSpec.EXACTLY && heightSize > 0){
size = heightSize;
}
else{
size = widthSize < heightSize ? widthSize : heightSize;
}

int finalMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
super.onMeasure(finalMeasureSpec, finalMeasureSpec);
}

关于android - 父中心不适用于自定义相对布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40355455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com