Android Different Values Folder For Different Screen Sizes

强颜欢笑 提交于 2019-12-11 04:17:08

问题


i have an issue for my application. I want to define different view width and height dimensions or different text sizes for different screen sizes. I've defined different values folders for screen resolution as other question and Android documentation said.

But i have a problem for this way. For example Samsung Galaxy S5 uses "values-sw320dp-xxhdpi" folder and Samsung Galaxy S3 Mini uses "values-sw320dp-hdpi" folder according to my tests. If i don't have sw-320dp-xxhdpi folder, i expected application must use default values folder's dimensions but it uses another 320dp's dimensions. So, S3 Mini and S5 uses same values if i don't use values folder for S5

After that, i tried to use different way. I explored to set DisplayMetrics instance with my values;

Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics();
    display.getMetrics(outMetrics);
    tv2.setText(outMetrics.toString());

    if (outMetrics.widthPixels < 380 && outMetrics.heightPixels < 480) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 304.0f, 306.0f));
        tv1.setText("1");
    } else if (outMetrics.widthPixels >= 380
            && outMetrics.widthPixels < 480
            && outMetrics.heightPixels >= 480
            && outMetrics.heightPixels < 800) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 306.0f, 306.0f));
        tv1.setText("2");
    } else if (outMetrics.widthPixels >= 480
            && outMetrics.widthPixels < 720
            && outMetrics.heightPixels >= 800
            && outMetrics.heightPixels < 1080) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 308.0f, 308.0f));
        tv1.setText("3");
    } else if (outMetrics.widthPixels >= 720
            && outMetrics.widthPixels < 1080
            && outMetrics.heightPixels >= 1080
            && outMetrics.heightPixels < 1920) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 307.0f, 307.0f));
        tv1.setText("4");
    } else if (outMetrics.widthPixels == 1080
            && outMetrics.heightPixels == 1920) {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 370.0f, 370.0f));
        tv1.setText("5");
    } else {
        outMetrics.setTo(getDisplayMetrics(outMetrics, 305.0f, 305.0f));
        tv1.setText("6");
    }

But there is a logical error here! I defined a string in strings.xml with same name and different values. I expect if screen width and height values in my values, my pre-defined string will be seen on screen. Some devices show correct value, some devices shows wrong value. For example HTC One E6 uses last values (305x305) according to it's dimensions it have to write "Default Value" on screen but it writes "Between w480 w720 Case!". This string must be seen when device use 308x308 case.

What shoud i do solve this problem? Is there a tricky or easy way?

来源:https://stackoverflow.com/questions/29513999/android-different-values-folder-for-different-screen-sizes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!