以编程方式将视图高度和位置设置为屏幕大小的分数

时间:2014-05-09 11:16:41

标签: java android view height pixel

我试图将应用中视图的高度设置为用户屏幕总高度的一小部分。但是,我似乎永远无法让它完全奏效。我已经看到的以像素为单位获得屏幕高度的其他解决方案给出了良好的近似位置,但视图位置和高度似乎因屏幕而异。

我该怎么做?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我想你可能已经尝试过这个技巧了。

分别使用displayMetrics.widthPixels和displayMetrics.heightPixels获取宽度和高度(以像素为单位)

然后(假设你有相对布局,你要设置它的位置)将params设置为 -

RelativeLayout.LayoutParams layoutParam;

设置保证金如下

//margin (left, top, right, bottom) in pixel CO-Ordinates
layoutParam.setMargins(screenWidth/108+screenWidth*seekTime/29, screenHeight/13, (screenWidth-screenWidth*seekTime/29)+screenWidth/108, (int) (screenHeight/0.9));

这里是分母(108,29,13,0.9)中的数字,我是通过试错法获得的,最适合我的项目

所以基本的想法是将它设置在像素的屏幕高度的一小部分。

对于我的项目,它适用于我们测试的所有设备,我们还将方向锁定为“纵向”。如果屏幕方向改变,可能无法正常工作

另一种方式可能是,如果您想要追求它...... 使边距成为屏幕宽度的函数。 例如:

if(height>4){
        set at half height
    }
else{
        set at one-third height
    }

(我希望你在整个应用程序和商店中只调用一次显示矩阵,比如在第一个活动的启动时,并且只是从存储的地方操纵边距)

答案 1 :(得分:0)

获取您可以使用的屏幕尺寸:

DisplayMetrics dm = new DisplayMetrics(); 。this.getWindowManager()getDefaultDisplay()getMetrics(DM);

screenWidth = dm.widthPixels; screenHeight = dm.heightPixels;

无论屏幕大小如何,您都希望视图在调整大小时保持其宽高比。

如果你有一个视图,当它看起来没问题是400 px宽和200 px高时,你需要在重新缩放布局后保留这个比例(400/200)= 2。

让我们说屏幕是480 x 800 h,你希望你的视图是屏幕宽度的50%。 那么480 * 50%= 240将是您视图的目标宽度。

但我们希望保留宽高比: 400/200 = 2 =目标宽度/目标高度= 240 / X. 然后X = 240 * 200/400 = 120

您的视图新布局应为240w x 120 h(240/120 = 2 - 保留 - 保留 - )

此处,由于Android设备在宽高比(宽度/高度)方面有不同的尺寸,您可能需要检查新高度如何适应屏幕高度。

在这种情况下,

120/800 = 15%。

如果高度%不符合您的需要,或者高度恰好超出屏幕范围,或者新高度不符合您想要的最小高度,那么,您可以通过设置高度并计算与宽高比相关的新宽度进行反向计算。

通过这种方式,视图不会在任何屏幕上变形。