处理大屏幕和普通屏幕等不同屏幕的图标大小的最佳方法是什么

时间:2013-11-19 20:05:39

标签: android android-layout android-drawable screen-size

假设您设计的是普通屏幕(4英寸)的hdpi密度,但是当您在大屏幕(7英寸)的hdpi密度上看到它时,图标太小。 最初我做的是创建一个文件夹drawable-large-hdpi,然后从xhdpi获取图标并将其复制到那里。  它似乎运行良好,但是当我遇到一个大的xhdpi屏幕时,它导致了问题,因为Android在查看drawable-xhdpi文件夹之前首先查看drawable-large-hdpi,因为large具有优先权。创建另一个文件夹drawable-large-xhdpi并复制文件似乎效率低下,因为您必须为不断扩展的dpi屏幕执行此操作。

因此,如果您要设置特定的宽度/高度,而不是在应用内的图标上设置“wrap_content”, layout_width / height = @ dimen / icon_size,然后在dimensions.xml中设置值和值 - 大文件夹中的不同宽度?

如果可以将其设置为父视图的百分比,那将是很好的,但布局权重仅适用于线性布局的某些场景

是否有更好的方法。

2 个答案:

答案 0 :(得分:0)

public class ScreenPercentImageView extends ImageView {

    private float mWidthPercent = 100;
    private double mDrawableScalePercent;

    public ScreenPercentImageView(Context context) {
        super(context);
    }

    public ScreenPercentImageView(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
        setup(context, attrs);
    }

    public ScreenPercentImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setup(context, attrs);
    }

    private void setup(Context context, AttributeSet attrs) {
        TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
                R.styleable.ScreenPercentImageView, 0, 0);
        try {
            mWidthPercent = a.getFloat(
                    R.styleable.ScreenPercentImageView_widthPercentIV, 50);
        } finally {
            a.recycle();
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int parentWidth = getResources().getDisplayMetrics().widthPixels;
        int parentHeight = getResources().getDisplayMetrics().heightPixels;

        int width;

        if (parentHeight > parentWidth)
            width = (int) (parentWidth * mWidthPercent / 100);
        else
            width = (int) (parentHeight * mWidthPercent / 100);

        mDrawableScalePercent = (double) width / parentWidth;
        int height = getDrawable().getIntrinsicHeight() * width
                / getDrawable().getIntrinsicWidth();
        setMeasuredDimension(width, height);

    }

    public double getDrawableScalePercent() {
        return mDrawableScalePercent;
    }

}

这是一个可以用作示例的ImageView。我创建它所以它可以使用宽度作为屏幕大小的百分比。它会适当地缩放高度。您可以使用此概念使其使用父级的宽度而不是屏幕大小。

答案 1 :(得分:0)

您在大屏幕上使用的布局,不应该只是小屏幕的“伸展”/放大版本。根据屏幕上有多少可用空间,Android非常适合加载和创建不同的布局。

片段被引入到Android中,因此您可以做各种各样的事情,以便充分利用不同的屏幕尺寸。

使用最小宽度可用桶(layout-swXdp,其中X是您喜欢的dp的数量),并在屏幕内部有足够空间时创建独特的布局,平板电脑用户会爱你

此处有更多信息:Building a Dynamic UI with Fragments