class PxAdapterGenerator(val designSize: Size, val adapterSizes: List<Size>) { fun generate() { adapterSizes.forEach { val endFix = if (it.height > it.width) { "${it.height}x${it.width}" } else { "${it.width}x${it.height}" } val dir = File("values-${endFix}") if (!dir.exists() || !dir.isDirectory) { dir.mkdirs() } val dimensFile = File(dir, "dimens.xml") if (dimensFile.exists()) { dimensFile.delete() }
val bufferedWriter = BufferedWriter(FileWriter(dimensFile)) bufferedWriter.write("""<?xml version = "1.0" encoding = "utf-8"?>""") bufferedWriter.newLine() bufferedWriter.write(""" <resources >""") bufferedWriter.newLine()
for (i in 1..designSize.width) { val px = (i * (it.width.toFloat() / designSize.width) + 0.5f).toInt() bufferedWriter.write(""" <dimen name="x_${i}">${px}px</dimen>""") bufferedWriter.newLine() } for (i in 1..designSize.height) { val px = (i * (it.height.toFloat() / designSize.height) + 0.5f).toInt() bufferedWriter.write(""" <dimen name="y_${i}">${px}px</dimen>""") bufferedWriter.newLine() } bufferedWriter.write(""" </resources>""") bufferedWriter.close() }
} }
fun main() { val designSize = Size(750, 1334) val adapterSizes = listOf( Size(480, 800), Size(750, 1334), Size(1080, 2340), Size(1440, 2560) ) val generator = PxAdapterGenerator(designSize, adapterSizes) generator.generate()
boolResTable_config::isBetterThan(const ResTable_config& o, const ResTable_config* requested)const{ if (screenSize || o.screenSize) { // "Better" is based on the sum of the difference between both // width and height from the requested dimensions. We are // assuming the invalid configs (with smaller sizes) have // already been filtered. Note that if a particular dimension // is unspecified, we will end up with a large value (the // difference between 0 and the requested dimension), which is // good since we will prefer a config that has specified a // size value. int myDelta = 0, otherDelta = 0; if (requested->screenWidth) { myDelta += requested->screenWidth - screenWidth; otherDelta += requested->screenWidth - o.screenWidth; } if (requested->screenHeight) { myDelta += requested->screenHeight - screenHeight; otherDelta += requested->screenHeight - o.screenHeight; } if (myDelta != otherDelta) { return myDelta < otherDelta; } }
AutoLayoutInfo info = new AutoLayoutInfo(); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoLayout_Layout); int baseWidth = a.getInt(R.styleable.AutoLayout_Layout_layout_auto_basewidth, 0); int baseHeight = a.getInt(R.styleable.AutoLayout_Layout_layout_auto_baseheight, 0); a.recycle(); TypedArray array = context.obtainStyledAttributes(attrs, LL); int n = array.getIndexCount(); // 收集所有跟尺寸相关的属性 for (int i = 0; i < n; i++) { int index = array.getIndex(i); // String val = array.getString(index); // if (!isPxVal(val)) continue;
if (!DimenUtils.isPxVal(array.peekValue(index))) continue;