如何获取在 XML 中设置为ImageBox的ImageButton的宽度,并且该宽度的大小取决于权重?
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:orientation="horizontal">
<ImageButton
android:id="@+id/fluido"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:tint="@color/icon"
android:layout_weight="0.33"
app:srcCompat="@drawable/fluido" />
<......../>
</LinearLayout>
如何获得由 weight 自动设置的值?
在 XML 中设置为 0 ,如果我这样做:imageButton.getWidth();
或imageButton.getLayoutParams().width();
都返回XML形式的0。
答案 0 :(得分:1)
可以使用以下代码段:
yourView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
// Correct view dimensions are here:
int width = yourView.getMeasuredWidth();
int height = yourView.getMeasuredHeight();
}
});
答案 1 :(得分:1)
您应该使用 addOnPreDrawListener
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
if (view.getViewTreeObserver().isAlive())
view.getViewTreeObserver().removeOnPreDrawListener(this);
// put your code here
return false;
}
});
答案 2 :(得分:0)
Button button;
button = (Button) findViewById(R.id.button);
int buttonWidth = button.getWidth();
// Showing the Result
Toast.makeText(MainActivity.this, ""+buttonWidth, Toast.LENGTH_SHORT).show();
//结果
答案 3 :(得分:0)
给出0,是因为您必须确保存储宽度的整数未声明为final。
它应该不是这样的: Click to see Image