大侠,我在相对布局文件中动态添加组件(如button)到指定地方,使用了如下方法:

finalImageButtonbt=newImageButton(this);bt.setImageResource(R.drawable.bt);finalRelat... final ImageButton bt= new ImageButton(this);
bt.setImageResource(R.drawable.bt);
final RelativeLayout.LayoutParams layoutParamsbt = new RelativeLayout.LayoutParams(-2, -2);
layoutParamsbt.setMargins(100, 170, 90, 100);//就是这参数不能使用dp的问题
layoutParamszoneclean.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, -1);
XXX.addview(bt,layoutParamsbt);

在模拟器上吧bt添加到指定位置上去,到时在我手机上运行就有误差了,分析得到setMargins()函数只能使用int 型的参数而不是DP单位的,这怎么做呀,还有没有其他办法呢,在不同分辨率的手机上保持相对位置不变呢?
展开
 我来答
T寒冬飞雪T
2013-07-28 · TA获得超过225个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:161万
展开全部
先取得屏幕的分辨率,然后计算位置再赋值。
int代表的的单位是像素,这个位置通过相对位置或者比例位置来计算。
假如你获得了屏幕的宽高保存在 width和height中,那么你可以用 width/2,height/2得到屏幕的中心
同理,你可以得到任何的相对位置或绝对位置。
通常的做法是,针对不同的长宽比做两套坐标,然后根据实际的尺寸按比例缩放。

例如,针对320x480的分辨率写一套左边,那么针对960x640的同样适用,只需要乘以2即可。这里的2就是缩放比例,只要长宽比相同,就可以简单地通用。

另外可以参考线性布局的思路,也就是从上到下,或者从左到右。具体过程相当与让你写一个xml的布局解析器。anbdroid的布局你应该很了解了吧。包括相对布局。你需要从代码的角度思考一下这些布局都是如何实现的,其实他们也都是通过一个布局解析器然后通过代码添加进来的。
追问
对,“int代表的的单位是像素,这个位置通过相对位置或者比例位置来计算。
”我上面已经设置了让其相对于布局的右侧计算“RelativeLayout.ALIGN_PARENT_RIGHT”,我也获得了屏幕的高宽,如果以相对于中兴位置来布局,这和我上面相对于右侧布局没多大差别吧。

而XML布局解析器的思路一时半会还搞不大懂,呵呵。。。能占用你点时间,给我讲讲好么?
追答
你举个例子就明白有没有差别了。
假如我有两个不同分辨率的手机,一个是 200x300,一个是300x400
如果我要取得中心,那么毫无疑问,一个是 (100,150) 一个是(150,200)

然而,如果我要以左侧对齐,则会有这样一个问题出现。
同样距离左侧10像素,那么取得的点分别是是(10,150),(10,200),如果这个按钮宽度为100,
那么结束的位置分别是是(110,150) (110,200),显然,对于300x400来说,这个按钮的位置显然不对,因为右侧空出了一大片地方。

正确的做法是,算比例,10/200 = x/300 计算出x,就是你在另一个分辨率下应该对齐的位置,这才叫左对齐。dp,dip,sp也基本是这个道理。它将屏幕均分成若干等分,然后布置坐标。这样的效果相当于按比例。这就是我说的,按比例缩放坐标。
来自:求助得到的回答
网易云信
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同... 点击进入详情页
本回答由网易云信提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式