大侠,我在相对布局文件中动态添加组件(如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单位的,这怎么做呀,还有没有其他办法呢,在不同分辨率的手机上保持相对位置不变呢? 展开
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单位的,这怎么做呀,还有没有其他办法呢,在不同分辨率的手机上保持相对位置不变呢? 展开
1个回答
展开全部
先取得屏幕的分辨率,然后计算位置再赋值。
int代表的的单位是像素,这个位置通过相对位置或者比例位置来计算。
假如你获得了屏幕的宽高保存在 width和height中,那么你可以用 width/2,height/2得到屏幕的中心
同理,你可以得到任何的相对位置或绝对位置。
通常的做法是,针对不同的长宽比做两套坐标,然后根据实际的尺寸按比例缩放。
例如,针对320x480的分辨率写一套左边,那么针对960x640的同样适用,只需要乘以2即可。这里的2就是缩放比例,只要长宽比相同,就可以简单地通用。
另外可以参考线性布局的思路,也就是从上到下,或者从左到右。具体过程相当与让你写一个xml的布局解析器。anbdroid的布局你应该很了解了吧。包括相对布局。你需要从代码的角度思考一下这些布局都是如何实现的,其实他们也都是通过一个布局解析器然后通过代码添加进来的。
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 广告
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询