代码之家  ›  专栏  ›  技术社区  ›  Jennifer

如何定位所有设备看起来都一样的具有边距的视图?

  •  0
  • Jennifer  · 技术社区  · 6 年前

    我试图在中间放置一个视图,通过编程添加130(边距顶部)使其看起来更好,但是,我不确定如何使其他android设备(如平板电脑)看起来相同?在正常的android手机上,增加130的页边空白看起来不错,但在平板电脑上看起来会有所不同。我怎样才能做出一个逻辑,给出一个利润上限,将提供相同的外观在所有设备上?一些例子或提示将是伟大的!我很想听到你的消息!

    margin_top = 130 // How to make this look good on all devices? 
    
    ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
    p.setMargins(0, margin_top, 0, 0);
    v.requestLayout();
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   grrigore Danilo Tomaccio    6 年前

    我的做法如下:

    1)。 获取设备高度。同时检查 this 回答。

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int height = displayMetrics.heightPixels;
    

    (第二章)。 计算比率。

    130dp 我想。使用 pixplicity 我设法把它转换成 px .

    dp to px

    你的手机有分辨率高 以像素为单位的权重。我们把高度定义为 phoneHeight .

    这对我来说也有点棘手。你可以看到130dp对于ldpi、mdpi等有不同的像素值。我个人不知道应该使用哪一个,你可以试试mdpi。(我会努力研究更多,然后再给你一个答案)。

    乐:

    您可以使用此方法根据手机将dp转换为像素。(见 this 回答)。

    public static float convertDpToPixel(float dp, Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
        return px;
    }
    

    在下面的公式中使用返回的px。(我们调用返回的px- convertedPx .

    (第三章)。 上边距值的公式。

    如果我们使用表中mdpi的值130dp,我们得到130px。所以公式是:

    margin_top = (convertedPx / phoneHeight) * height

    具有 您当前测试的手机高度 height 设备的高度使用 displayMetrics .

    注意: 转换的px 将是一个常数。你只需要运行这个方法( convertDpToPixel )在你的手机上找出130dp的像素值。