我有LinearLayout
,其中包含两个Button
小部件layout_weight=1
。取决于Button
的文字或屏幕分辨率的长度,我得到矩形(灰色矩形)的按钮,但我需要保留方形(蓝色方块) 。
我试图在height
方法中更改LinearLayout
param的onStart()
,取决于Button
' s width
,但是{{1 }}返回getWidth()
。我明白这是因为当时的观点仍未呈现。请帮我解决问题。
答案 0 :(得分:1)
有很多方法可以实现这一目标。如果您需要找到元素的实际宽度,您可以:
1)将OnGlobalLayoutListener
附加到视图的ViewTreeObserver
(但请记住在完成后将其删除)
2)或者您可以手动衡量您需要的内容:
if(view.getMeasuredHeight() == 0){
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(metrics);
view.measure( metrics.widthPixels, metrics.heightPixels );
}
int realHeight = view.getMeasuredHeight();
//...your code
答案 1 :(得分:0)
你是完全正确的,因为在那时候不会绘制视图,所以你必须使用viewtreeobserver:
像这样: final ViewTreeObserver treeObserver = viewToMesure
.getViewTreeObserver();
treeObserver
.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
System.out.println(viewToMesure.getHeight()
+ "SDAFASFASDFas");
heith = viewToMesure.getHeight();
}
});
在根据您计算的视图创建视图后,将调用此视图树观察器,您可以更改。
答案 2 :(得分:-2)
您可以使用自定义视图通过覆盖onMeasure将视图的高度设置为与其宽度相同:
public class SquareButton extends Button {
public SquareButton (Context context) {
super(context);
}
public SquareButton (Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareButton (Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
}
您只需使用xml布局中的自定义按钮,即可在活动中执行任何操作:
<com.package.name.SquareButton
android:layout_with="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />