您的位置:首页 > 其它

根据Button背景图片长宽比调整Button大小

2014-12-12 15:52 253 查看
需求:Button宽度为match_parent,因此宽度不定,但要根据背景图片的长宽比来调整Button大小使其适应背景图。

之前采用的方法是OnGlobalLayoutListener, 不过这样会导致同一个页面的EditText在修改文字时不改变文字。
Button completeButton = (Button)findViewById(R.id.completeButton);
completeButton.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
public void onGlobalLayout()
{
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.button_long);
double ratio = ((double)bitmap.getHeight()) / bitmap.getWidth();
ViewGroup.LayoutParams params = completeButton.getLayoutParams();
params.height = (int)(completeButton.getWidth() * ratio);;
completeButton.setLayoutParams(params);
}
});

但如果宽度固定,左右两侧的padding也已经知道,可以动态设置LayoutParams
DisplayMetrics metrics = getResources().getDisplayMetrics();

int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, metrics);
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.button_long);
double ratio = ((double)bitmap.getHeight()) / bitmap.getWidth();

ViewGroup.LayoutParams params = <span style="font-family: Arial, Helvetica, sans-serif;">completeButton</span><span style="font-family: Arial, Helvetica, sans-serif;">.getLayoutParams();</span>
params.width = metrics.widthPixels - padding * 2;
params.height = (int)(params.width * ratio);<pre name="code" class="java">completeButton.setLayoutParams(params);


这样就可以了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: