[英]Change button height depending on width [Android]
我在Android Studio
遇到按钮问题。 我希望某些按钮为正方形,并且同时具有基于weight
的non-fix width
。 我的意思是:
android:layout_width="0dip"
android:layout_weight="0.5"
android:layout_height="wrap_content"
我在这里寻找答案,但是没有一个对我有用。 我知道不可能通过XML
做到这一点,所以我在Java代码中尝试了btn.getWidth()
, btn.getLayoutParams().width
...,但是它们都return 0
作为值。
任何想法?
如果要通过代码设置按钮大小,则应执行以下操作(在扩展Button
的类中):
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
int height = width;
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);}
要么
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int width = getMeasuredWidth();
int height = width;
setMeasuredDimension(width, height);
}
但是有一种更好的方法:为所有dpi创建正方形png并将其设置为按钮的背景。
使用以下侦听器:
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//Here you can get and set the TextViews size.
}
});
}
之所以得到0,是因为在您检查视图时未进行度量。 为确保获得实际视图,可以使用此侦听器。
我在最后测试了该代码。 就在onCreate()结束之前。 只需写下这些行。
Button button= (Button ) findViewById(R.id.button);
button.post(new Runnable() {
@Override
public void run() {
Log.e("",""+button.getHeight()+" "+button.getWidth());
}
});
如果您有任何疑问,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.