Android让两个不同内容的Button动态对齐

来源:互联网 发布:php手机验证码 编辑:程序博客网 时间:2024/06/15 04:31

近做的项目中要求两个内容不同的TextView做Button,每次按照最长的那个Text为基准调整button的长度。(这些TextView以一个9png的图片为背景,所以会跟着内容的长度自己变长宽)

要实现这个功能,在XML显然不大好做,那么就要放到代码里面去完成。


大体思路:

量出两个button的长度,谁长用谁的为基准,再重新设置宽度。


遇到的难点:

本来是想要在界面以启动的时候就设置好宽度的。但是发现在onResume里面其实是无法获取控件的宽度的。getWidth始终为0。


解决方案:

如果想要在界面显示出来之前就获得TextView的宽度,请使用如下方法:

<span style="font-size:14px;">mSettingWidth = settingtxt.getPaint().measureText(getString(R.string.customize))                                + getResources().getDisplayMetrics().density*9;</span>


其中,getPaint().measureText(getString(“XXXXXX”) 这句话的功能是,根据字串“XXXXX”为准,测量用这个TextView显示这段话需要多长的长度。可以看出其实这根本与这个控件有没有显示出来没有任何关系,因此使用这句话在onResume里面调用的话,就可以正确的测量出字的宽度。最后getResources().getDisplayMetrics().density*9 这句话是因为这个控件设置了一个9dp的左间距。如果没有间距的话这个长度是不用算的。通过这种方式就可以正确的量出一个textView到底占用了多宽像素。解决了这个问题,后面的步骤迎刃而解,具体实现如下:

if(mSettingWidth==0||mBackgroudWidth==0){            mSettingWidth = settingtxt.getPaint().measureText(getString(R.string.customize))                                + getResources().getDisplayMetrics().density*9;            mBackgroudWidth = backgroundtxt.getPaint().measureText(getString(R.string.background))                                + getResources().getDisplayMetrics().density*9;            Log.d(TAG, "mSettingWidth="+mSettingWidth+",mBackgroudWidth="+mBackgroudWidth);        }        if(mSettingWidth>mBackgroudWidth){            settingtxt.setMinimumWidth((int)(mSettingWidth));            backgroundtxt.setMinimumWidth((int)(mSettingWidth));        }else{            settingtxt.setMinimumWidth((int)(mBackgroudWidth));            backgroundtxt.setMinimumWidth((int)(mBackgroudWidth));        }

这样一旦该应用已启动,用户获得焦点后,这两个控件就会一直长度一致咯~

0 0