Android屏幕密度布局问题

时间:2013-06-22 00:31:33

标签: android android-layout android-xml

我的应用应该是这样的:

enter image description here

但出于某种原因,Galaxy S4看起来像这样:

enter image description here

寻呼机指标要小很多,我看不到下一个六边形。这是我的频道寻呼机:https://gist.github.com/hanleyhansen/e0a5aae4ad1548316b91

这似乎发生在屏幕上,分辨率更高。

这就是我绘制六边形的方式:https://gist.github.com/hanleyhansen/0b6f032daaf74d012925

这是我的fragment_channel.xml:https://gist.github.com/hanleyhansen/70b865b0e982ee7e0536

我如何绘制指标:https://gist.github.com/hanleyhansen/8037f74304a32565228d

2 个答案:

答案 0 :(得分:1)

快速尝试这个问题我猜你需要为XXHDPI定义一个新资源(S4和Htc One落入这个密度桶)。还要检查您的布局是否正在使用屏幕大小存储桶(而不是密度),并且您要根据dp(或其他与分辨率无关的单位)定义任何“固定大小”资源。

答案 1 :(得分:1)

对于点,您使用像素绘图。因此,xhdpi屏幕上的这些圆圈在视觉上比在mdpi屏幕上更小(像素更大)。

为了获得类似的大小调整(在更高的dpi设备上使用更多像素),我建议更改PageControl,如下所示。

public class PageControl extends LinearLayout {

    int page = 0;
    int count = 0;
    int spacer = 8;
    private Boolean centered = true;

    int r;
    final int rDP = 8;  // DP value (needs conversion to dp placed into r)
    private final Paint mNormal = new Paint(Paint.ANTI_ALIAS_FLAG);
    private final Paint mSelected = new Paint(Paint.ANTI_ALIAS_FLAG);

    public PageControl(Context context) {
            super(context);
            r = dpToPx(context, rDP);
            setWillNotDraw(false);
    }

    public PageControl(Context context, AttributeSet attrs) {
            super(context, attrs);
            r = dpToPx(context, rDP);
            setWillNotDraw(false);
            setCentered(true);
    }

public int dpToPx(int dp) {
        float density = getResources().getDisplayMetrics().density
        return (int) (dp * density + 0.5f);
}