gpt4 book ai didi

android - 无法以编程方式垂直使用 setGravity 设置重力。这是 Android 错误或功能吗?

转载 作者:行者123 更新时间:2023-11-30 04:24:02 25 4
gpt4 key购买 nike

我有一个带有四个按钮的自定义 View 。我用 Java 创建了 View ,因为我想为按钮设置动画。我想将按钮上的文本居中,但我只能水平(左右)而不是垂直。文本粘在顶部。

这是我可以使用的最基本的代码:

public class CopyOfGameView extends ViewGroup implements View.OnClickListener {

private Main main;

public CopyOfGameView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CopyOfGameView(Context context) {
super(context);
}

public void reset(Main main) {
this.main = main;
removeAllViews();

for (int c = 0; c < 4; c++) {
ButtonView buttonView = new ButtonView(getContext(), c);
buttonView.setText("x");
buttonView.setTextSize(6);
buttonView.setGravity(Gravity.CENTER);
addView(buttonView);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int w = getWidth();
int h = getHeight();
int oneFourth = h / 4;

int count = getChildCount();
for (int i = 0; i < count; i++) {
ButtonView buttonView = (ButtonView) getChildAt(i);
int left = 0;
int top = oneFourth * buttonView.getRow();
int right = w;
int bottom = oneFourth * buttonView.getRow() + oneFourth;
buttonView.layout(left, top, right, bottom);
}
}

public void onClick(View v) {}

protected ButtonView findButtonView(int row) {
int count = getChildCount();
for (int i = 0; i < count; i++) {
View v = getChildAt(i);
if (v instanceof ButtonView) {
ButtonView buttonView = (ButtonView) v;
if (buttonView.getRow() == row) {
return buttonView;
}
}
}
return null;
}

protected class ButtonView extends Button {
private int row;

protected ButtonView(Context context, int row) {
super(context);
this.row = row;

Drawable image = getResources().getDrawable(R.drawable.btn_black);
setBackgroundDrawable(image);
setClickable(true);
setOnClickListener(CopyOfGameView.this);
}

public int getRow() {
return row;
}

public void setRow(int row) {
this.row = row;
}
}
}

这是正常现象还是 Android 中的错误?如何使文本垂直居中?

最佳答案

该项目以另一个名称重新启动,凭借一年的经验,我能够解决问题。我还实现了 AutoResizeTextView,因为它适合该项目。我从以下帖子中获取了 AutoResizeTextView: Auto Scale TextView Text to Fit within Bounds

但我不得不修改它,因为此解决方案在 onLayout 方法中应用了测量的尺寸。但是我在测量时需要尺寸,所以我将这个逻辑从 onLayout 移到了 onMeasure。

基本上,我从 LinearLayout 继承了 ButtonView,给它一个 AutoResizeTextView subview ,并使用 Android Measuring(onMeasure、onLayout 和布局)。

请记住,我无法使用 Chase 从 LinearLyout 继承整个 View 的解决方案,因为我为 ButtonView 设置了动画。

测量详情:我在CopyOfGameView的onMeasure中测量了ButtonView,然后在ButtonView的onMeasure中测量了AutoResizeTextView。然后在 ButtonView 的布局方法中,我将 TextView 垂直居中。

关于android - 无法以编程方式垂直使用 setGravity 设置重力。这是 Android 错误或功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821039/

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