gpt4 book ai didi

Android 无法将子级添加到自定义 Layout(继承自 ViewGroup)

转载 作者:太空狗 更新时间:2023-10-29 13:58:28 25 4
gpt4 key购买 nike

嗨,我是 android 开发的新手,我正在尝试创建自己的自定义布局:

public class EqLayout extends ViewGroup {

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

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

public EqLayout(Context context, AttributeSet attrs, int defstyle){
super(context, attrs, defstyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int lato = getLato();
int w = getMeasuredWidth()/lato;
int h = getMeasuredHeight()/lato;
int ws = MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY);
int hs = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);

for(int i = 0; i < getChildCount(); i++){
View v = getChildAt(i);
v.measure(ws, hs);
}
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int lato = getLato();
int w = (r - l)/lato;
int h = (t - b)/lato;

for(int i = 0; i < getChildCount(); i++){
View v = getChildAt(i);
int x = i%lato, y = i/lato;
v.layout(x*w, y*h, (x+1)*w, (y+1)*h);
}

}

private int getLato(){
int r = (int) Math.ceil(Math.sqrt(getChildCount()));
r = (r > 0) ? r : r+1;
return r;
}
}

主要 Activity :

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EqLayout eql = (EqLayout) findViewById(R.id.eqlviewlayout);
for(int i = 0; i < 14; i++){
Button b = new Button(this);
b.setText("#"+i);
eql.addView(b);
}
}
}

这就是 xml:

XML file

一切似乎都很好,但我不能给它添加一个 child 。我通过拖放按钮在运行时和 Android Studio 中进行了尝试,但没有成功。

有人知道为什么会这样吗?感谢抽出时间,询问您是否需要更多信息。

最佳答案

您对 child 的高度负数。

只需在您的 onLayout 中替换这一行:

int h = (t - b)/lato;

int h = (b - t)/lato;

你很好!

Screenshot

关于Android 无法将子级添加到自定义 Layout(继承自 ViewGroup),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769386/

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