如何获得ImageButton宽度

时间:2018-09-09 06:28:18

标签: java android parameters width

如何获取在 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。

4 个答案:

答案 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();

//布局图像 enter image description here

//结果

enter image description here

答案 3 :(得分:0)

给出0,是因为您必须确保存储宽度的整数未声明为final。

它应该不是这样的: Click to see Image