最近对Android 的Material风格比较感兴趣,MaterialButton很好用,不过插入icon时,icon本身会自动位于最右边,比如下面的注册按钮(随便放的一个icon):
查了一下,官方没有提供居中的方法,干脆自己写了两个方法:
一个是当按钮里只有图标时,将图标居中
另一个是当按钮里图标和文字存在时将他们居中。
思路很简单
1、先获取按钮的宽度,之后让按钮中的内容左填充到按钮宽度的一半
2、再获取按钮中内容的宽度,让按钮中的内容左填充到按钮宽度的一半之后又减去内容自身宽度的一 (就是内容先左填充按钮宽度一半的距离,再左填充负的内容自身一半的距离)
代码如下:
1.MaterialButton按钮中的icon图标和内容动态居中
//复制这个方法就行
public void getIconAndContentCenter(final MaterialButton btn){
btn.post(new Runnable() {
@Override
public void run() {
int btnwidth = btn.getWidth();
btn.measure(0, 0);
int contentwidth = btn.getMeasuredWidth();
//可在下面的括号里适当加减整数来达到你想要的位置
int paddingleft = ( btnwidth - contentwidth ) / 2;
btn.setPadding(paddingleft, 0, 0, 0);
}
});
}
//下面是调用例子
@Override
protected void onCreate(Bundle savedInstanceState) {
MaterialButton b = findViewById(R.id.btn_register);
getIconAndContentCenter(b);
}
结果:
2.MaterialButton按钮只有icon图标时的动态居中方法
public void getIconcenter(final MaterialButton btn){
btn.post(new Runnable() {
@Override
public void run() {
int btnwidth = btn.getWidth();
btn.measure(0, 0);
int iconwidth = btn.getIcon().getIntrinsicWidth();
int paddingleft = ( btnwidth - iconwidth ) / 2;
btn.setPadding( paddingleft , 0, 0, 0 );
}
});
}
如果对你有用,请点个赞,嘻嘻