質問

I am trying to have a button which scales dynamically. At run time, I want its width and height to be 70% of the current size. However, the button is disappearing. Here is my code:

    Button btn = (Button) v.findViewById(R.id.button_delete_transaction);
    btn.setMinWidth(0);
    btn.setMinHeight(0);

    btn.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
    int width = btn.getMeasuredWidth();
    int height = btn.getMeasuredHeight();

    ViewGroup.LayoutParams params = btn.getLayoutParams();

    params.width = (int) .7 * width;
    params.height = (int) .7 * height;

    btn.setLayoutParams(params);

And the xml:

<Button

    android:id="@+id/button_delete_transaction"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:background="@drawable/add_img"
    android:focusable="false"

    />
役に立ちましたか?

解決

EDIT:

Ahh...it is because you are not casting the right thing as an int. You are casting 0.7 as an int (which goes to zero) and then multiplying it, instead of multiplying and then casting. You can use (int) (.7 * width) instead of (int) .7 * width.

See my example: http://ideone.com/NSGwGF

Anyway, my advice below still stands.


Why not use:

btn.setWidth((int) Math.round(.7 * width));
btn.setHeight((int) Math.round(.7 * height));

instead of:

ViewGroup.LayoutParams params = btn.getLayoutParams();
params.width = (int) .7 * width;
params.height = (int) .7 * height;
btn.setLayoutParams(params);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top