[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/caches\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n/.idea/navEditor.xml\n/.idea/assetWizardSettings.xml\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n.cxx\n"
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "content": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <JetCodeStyleSettings>\n      <option name=\"CODE_STYLE_DEFAULTS\" value=\"KOTLIN_OFFICIAL\" />\n    </JetCodeStyleSettings>\n    <codeStyleSettings language=\"XML\">\n      <indentOptions>\n        <option name=\"CONTINUATION_INDENT_SIZE\" value=\"4\" />\n      </indentOptions>\n      <arrangement>\n        <rules>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>xmlns:android</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>xmlns:.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*:id</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*:name</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>name</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>style</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>^$</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>ANDROID_ATTRIBUTE_ORDER</order>\n            </rule>\n          </section>\n          <section>\n            <rule>\n              <match>\n                <AND>\n                  <NAME>.*</NAME>\n                  <XML_ATTRIBUTE />\n                  <XML_NAMESPACE>.*</XML_NAMESPACE>\n                </AND>\n              </match>\n              <order>BY_NAME</order>\n            </rule>\n          </section>\n        </rules>\n      </arrangement>\n    </codeStyleSettings>\n    <codeStyleSettings language=\"kotlin\">\n      <option name=\"CODE_STYLE_DEFAULTS\" value=\"KOTLIN_OFFICIAL\" />\n    </codeStyleSettings>\n  </code_scheme>\n</component>"
  },
  {
    "path": ".idea/codeStyles/codeStyleConfig.xml",
    "content": "<component name=\"ProjectCodeStyleConfiguration\">\n  <state>\n    <option name=\"USE_PER_PROJECT_SETTINGS\" value=\"true\" />\n  </state>\n</component>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleMigrationSettings\" migrationVersion=\"1\" />\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"delegatedBuild\" value=\"false\" />\n        <option name=\"testRunner\" value=\"PLATFORM\" />\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n            <option value=\"$PROJECT_DIR$/library\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "README.md",
    "content": "\n# android布局能力增加，轻松实现圆角、边框、虚线、属性覆盖等功能。完全无侵入\n\n有排版： https://blog.csdn.net/long8313002/article/details/108703057 \n\n\n概述\n        \nandroid开发中，我们常常使用xml来写布局文件，这种实现方式不仅简单，而且表达能力更强。但是google提供的布局属性有限，有些功能的实现我们不得不使用代码，或者自定义控件的方式来实现。那有没有一种方法，可以将属性增强来实现额外的功能呢？例如我们常常使用background 来表示和设置背景，那是不是可以使用layout_radius来表示和设置圆角呢？\n\n \n\n使用示例\n需要在项目build.gradle中引用依赖\n\n implementation 'com.zhangzheng.superxml:library:1.1.0'\n 另外在Application注册一行代码\n\n  SuperXml.init(this)\n  OVER\n\n \n\n能力说明\n \n属性增强\n   圆角：         \n   <View\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"#FF0000\"\n        app:layout_radius=\"40dp\" />\n  说明\n\n       app:layout_radius 支持将控件背景设置为圆角，背景支持纯色背景或者图片，另外对于ImageView 的src如果想设置成圆角需要使用app:layout_src_radius，例如 \n\n<ImageView\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginTop=\"20dp\"\n    android:src=\"@mipmap/order_ic_shipper_default\"\n    app:layout_src_radius=\"10dp\" />\n \n\n   复合属性\n       \n\n  <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"20dp\"\n        android:text=\"asdasdasdasd\"\n        app:layout_textColor_pressedFalse=\"#00FF00\"\n        app:layout_textColor_pressedTrue=\"#FF0000\" />\n   说明\n\n        一般情况下，我们要表示点击和普通状态下不同的字体颜色，或者背景会使用selector来定义一个文件，然后在布局文件中引用，一方面这样的使用很麻烦，另外一方面可读性也会降低（用户需要进入selector文件进行分析，才知道代码表达意图）。这边封装了常用的复用属性，如下：\n\n属性\t属性类型\t说明\nlayout_background_enableTrue\nlayout_background_enableFalse\nreference|color（资源或者颜色）\n背景（是否可用）\nlayout_background_pressedTrue\nlayout_background_pressedFalse\nreference|color（资源或者颜色）\t背景（是否按压）\nlayout_background_selectedTrue\nlayout_background_selectedTrue\nreference|color（资源或者颜色）\t背景（是否选择）\nlayout_textColor_enableTrue\nlayout_textColor_enableFalse\nreference|color（资源或者颜色）\t字体颜色（是否可用）\nlayout_textColor_pressedTrue\nlayout_textColor_pressedFalse\n \n\nreference|color（资源或者颜色）\t字体颜色（是否按压）\nlayout_textColor_selectedTrue\nlayout_textColor_selectedFalse\nreference|color（资源或者颜色）\t字体颜色（是否选择）\n \t \t \n \n边框   \n <View\n        android:id=\"@+id/view\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"#FF0000\"\n        app:layout_border_color=\"#0000FF\"\n        app:layout_border_width=\"1dp\"\n        app:layout_radius=\"40dp\" />\n \n\n说明\n\n      比较简单，layout_border_color表示边框颜色，layout_border_width表示边框粗细，和radius一起使用表示边框圆角。\n\n \n\n \n\n虚线\n <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"#FF0000\"\n        app:layout_dash_gap=\"10dp\"\n        app:layout_dash_height=\"1dp\"\n        app:layout_dash_width=\"5dp\" />\n \n\n说明\n\n     可以在任何视图上使用（建议在View中定义），必须同时定义grap、dash_height、dash_width。支持横虚线，和竖虚线，这里会检测视图宽高来确定。属性说明：dash_grap(虚线间距)、dash_width(单个小线的宽)、dash_height(单个小线的高)\n\n \n\n \n\n视图替换或增强\n          这个能力可能会将布局文件中的视图替换成其他控件、或者对其进行增强。\n\n \n\n滚动视图\n      为了适配小屏手机，我们可能会在每一个布局文件中加上一层ScrollView，现在对容器控件进行能力增强。\n\n <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"130dp\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\"\n        android:scrollbars=\"none\"\n        app:layout_canScroll=\"true\">\n说明\n\n     在需要滚动的视图上添加属性app:layout_canScroll=\"true\"，来使其获得滚动的能力。另外所有scrollView的属性，可以配置在该容器控件中。\n\n \n\n \n\n属性覆盖\n          有一种很常见的业务场景，在一个条目中有多个控件，控件大多数属性是相同的（例如TextView的字体颜色、大小等），一般我们会给每一个控件加上相同的属性（冗余）、或者定义公共样式（太麻烦）。现在参考html的布局方式，在父控件中设置公共样式，给子控件当默认值。\n\n  <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:textColor=\"#FF0000\"\n        android:textSize=\"20sp\"\n        android:textStyle=\"italic\"\n        android:scaleType=\"center\"\n        app:layout_cover_children=\"true\">\n \n        <ImageView\n \n            android:layout_width=\"50dp\"\n            android:src=\"@mipmap/ic_launcher\"\n            android:layout_height=\"50dp\"/>\n \n        <TextView\n            android:capitalize=\"none\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textColor=\"#FF00FF\"\n            android:textStyle=\"italic\"\n            android:text=\"11111\" />\n \n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"10dp\"\n            android:textSize=\"13dp\"\n            android:text=\"22222\" />\n \n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"10dp\"\n            android:textSize=\"14dp\"\n            android:text=\"333333\" />\n \n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"10dp\"\n            android:textSize=\"15dp\"\n            android:text=\"444444\" />\n \n    </LinearLayout>\n \n\n支持的属性\n\n       \n\n控件类型\t属性\t \nTextView\t\ntextColor\n \ntextSize\n \ntext\n \nmaxLines\n \nmaxEms\n \ntextColorHint\n \nhint\n \ntextDirection\n \ntextStyle\n \ncapitalize\n \nImageView\t\nsrc\n \nscaleType\n \n \n\n扩展\n \n\n属性扩展\n  SuperXml.addDecorate(object : IDecorateView() {\n            override fun initExtraInfo(typedArray: TypedArray): Boolean {\n            }\n \n            override fun decorate(view: View) {\n            }\n        })\n实现参考\n\ninternal class RadiusDecorate(var radius: Float = 0f) : IDecorateView() {\n \n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        radius = typedArray.getDimension(R.styleable.decorate_view_layout_radius,0f)\n        return radius > 0\n    }\n \n    override fun decorate(view: View)= view.setRadius(radius)\n \n}\n \n\n控件替换 OR 增强\n SuperXml.addDecorate(object :IWrapDecorateView(){\n            override fun decorateView(view: View): View {\n            }\n \n            override fun initExtraInfo(typedArray: TypedArray): Boolean {\n            }\n        })\n实现参考\n\ninternal class ScrollWrapDecorate(var canScroll: Boolean = false) : IWrapDecorateView() {\n \n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        canScroll = typedArray.getBoolean(R.styleable.decorate_view_layout_canScroll, false)\n        return canScroll\n    }\n \n    override fun decorateView(view: View): View {\n        return ScrollViewProxy(\n            view,\n            attributeSet\n        )\n    }\n \n \n}\n \n属性覆盖\n  SuperXml.addCoverAttributeParse(object : AbsChildViewParse<TextView>(){\n            override fun createInfoView(context: Context, attributeSet: AttributeSet?): TextView {\n            }\n \n            override fun coverAttribute(): MutableList<*> {\n            }\n        })\n实现参考\n\nclass TextViewCoverParse : AbsChildViewParse<TextView>() {\n \n    override fun createInfoView(context: Context, attributeSet: AttributeSet?): TextView =\n        TextView(context, attributeSet)\n \n    override fun coverAttribute(): MutableList<*> = mutableListOf(\n        AttributeInfo(\"textSize\",{ textSize }) { value -> textSize = value },\n        AttributeInfo(\"textColor\",{ textColors }) { value -> setTextColor(value) },\n        AttributeInfo(\"text\",{ text }) { text -> setText(text) },\n        AttributeInfo(\"maxLines\",{ maxLines }) { maxLines -> setMaxLines(maxLines) },\n        AttributeInfo(\"maxEms\",{ maxEms }) { maxEms -> setMaxEms(maxEms) },\n        AttributeInfo(\"textColorHint\",{ hintTextColors }) { hintTextColors -> setHintTextColor(hintTextColors) },\n        AttributeInfo(\"hint\",{ hint }) { hint -> setHint(hint) },\n        AttributeInfo(\"textDirection\",{ textDirection }) { textDirection -> setTextDirection(textDirection) },\n        AttributeInfo(\"textStyle\",{ typeface }) { typeface -> setTypeface(typeface) },\n        AttributeInfo(\"capitalize\",{ inputType }) { inputType -> setInputType(inputType) }\n    )\n \n \n \n}\n \n\n代码：github\nhttps://github.com/long8313002/SuperXml\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\napply plugin: 'kotlin-android'\n\napply plugin: 'kotlin-android-extensions'\n\nandroid {\n    compileSdkVersion 28\n    buildToolsVersion \"30.0.2\"\n    defaultConfig {\n        applicationId \"com.zhangzheng.superxml.demo\"\n        minSdkVersion 21\n        targetSdkVersion 28\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n\n    compileOptions {\n        kotlinOptions.freeCompilerArgs += ['-module-name', \"com.zhangzheng.superxml\"]\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n    implementation 'androidx.appcompat:appcompat:1.2.0'\n    implementation 'androidx.core:core-ktx:1.3.1'\n    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'androidx.test.ext:junit:1.1.2'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'\n\n    implementation project(\":library\")\n}\n\n\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "app/src/androidTest/java/com/zhangzheng/superxml/demo/ExampleInstrumentedTest.kt",
    "content": "package com.zhangzheng.superxml.demo\n\nimport androidx.test.platform.app.InstrumentationRegistry\nimport androidx.test.ext.junit.runners.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getInstrumentation().targetContext\n        assertEquals(\"com.zhangzheng.superxml.demo\", appContext.packageName)\n    }\n}\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.zhangzheng.superxml.demo\">\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:name=\".MApplication\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <activity android:name=\".MainActivity\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/com/zhangzheng/superxml/demo/MApplication.kt",
    "content": "package com.zhangzheng.superxml.demo\n\nimport android.app.Application\nimport com.zhangzheng.superxml.library.SuperXml\n\nclass MApplication : Application() {\n    override fun onCreate() {\n        super.onCreate()\n        SuperXml.init(this)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/zhangzheng/superxml/demo/MainActivity.kt",
    "content": "package com.zhangzheng.superxml.demo\n\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.LayoutInflater\nimport android.view.View\nimport androidx.appcompat.app.AppCompatActivity\nimport com.zhangzheng.superxml.library.ext.setBorder\nimport kotlinx.android.synthetic.main.activity_main.*\n\nclass MainActivity : AppCompatActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path\n        android:fillColor=\"#008577\"\n        android:pathData=\"M0,0h108v108h-108z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeWidth=\"0.8\"\n        android:strokeColor=\"#33FFFFFF\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z\"\n        android:strokeWidth=\"1\"\n        android:strokeColor=\"#00000000\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"78.5885\"\n                android:endY=\"90.9159\"\n                android:startX=\"48.7653\"\n                android:startY=\"61.0927\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\" />\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\" />\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z\"\n        android:strokeWidth=\"1\"\n        android:strokeColor=\"#00000000\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#333333\"\n    android:orientation=\"vertical\">\n\n    <Button\n        android:layout_margin=\"20dp\"\n        android:id=\"@+id/btConfirm\"\n        android:layout_width=\"match_parent\"\n        app:layout_background_enableTrue =\"#FA871E\"\n        app:layout_background_enableFalse =\"#CCCCCC\"\n        android:textColor=\"#FFFFFF\"\n        android:textSize=\"16dp\"\n        app:layout_radius=\"10dp\"\n        android:gravity=\"center\"\n        android:enabled=\"false\"\n        android:text=\"到装货地打卡 15:30:01\"\n        android:layout_height=\"40dp\"/>\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:textColor=\"#FF0000\"\n        android:textSize=\"20sp\"\n        android:textStyle=\"italic\"\n        android:scaleType=\"center\"\n        app:layout_cover_children=\"true\">\n\n        <ImageView\n\n            android:layout_width=\"50dp\"\n            android:src=\"@mipmap/ic_launcher\"\n            android:layout_height=\"50dp\"/>\n\n        <TextView\n            android:capitalize=\"none\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textColor=\"#FF00FF\"\n            android:textStyle=\"italic\"\n            android:text=\"11111\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"10dp\"\n            android:textSize=\"13dp\"\n            android:text=\"22222\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"10dp\"\n            android:textSize=\"14dp\"\n            android:text=\"333333\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"10dp\"\n            android:textSize=\"15dp\"\n            android:text=\"444444\" />\n\n    </LinearLayout>\n\n    <View\n        android:id=\"@+id/line1\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"#FF0000\"\n        app:layout_dash_gap=\"10dp\"\n        app:layout_dash_height=\"1dp\"\n        app:layout_dash_width=\"5dp\" />\n\n\n    <View\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"@mipmap/order_ic_shipper_default\"\n        app:layout_radius=\"20dp\" />\n\n    <View\n        android:id=\"@+id/view\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"100dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"#FF0000\"\n        app:layout_border_color=\"#0000FF\"\n        app:layout_border_width=\"1dp\"\n        app:layout_radius=\"40dp\" />\n\n    <ImageView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"20dp\"\n        android:src=\"@mipmap/order_ic_shipper_default\"\n        app:layout_src_radius=\"10dp\" />\n\n    <Button\n        android:layout_width=\"30dp\"\n        android:layout_height=\"30dp\"\n        android:layout_marginTop=\"20dp\"\n        app:layout_background_pressedFalse=\"#FF0000\"\n        app:layout_background_pressedTrue=\"@mipmap/order_ic_shipper_default\" />\n\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"20dp\"\n        android:clickable=\"true\"\n        android:text=\"asdasdasdasd\"\n        app:layout_textColor_pressedFalse=\"#00FF00\"\n        app:layout_textColor_pressedTrue=\"#FF0000\" />\n\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"130dp\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\"\n        android:scrollbars=\"none\"\n        android:background=\"#FF0000\"\n        android:layout_margin=\"20dp\"\n        app:layout_radius=\"40dp\"\n        app:layout_canScroll=\"true\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textColor=\"#FFFFFF\"\n            android:text=\"可滚动\" />\n\n        <View\n            android:layout_width=\"100dp\"\n            android:layout_height=\"500dp\"\n            android:background=\"#FF0000\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"可滚动\" />\n    </LinearLayout>\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#008577</color>\n    <color name=\"colorPrimaryDark\">#00574B</color>\n    <color name=\"colorAccent\">#D81B60</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">SuperXml</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/test/java/com/zhangzheng/superxml/demo/ExampleUnitTest.kt",
    "content": "package com.zhangzheng.superxml.demo\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext.kotlin_version = '1.3.0'\n    repositories {\n        google()\n        jcenter()\n\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.1.4'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n\n        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'\n        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Sep 16 13:39:55 CST 2020\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-5.4.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx1536m\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Kotlin code style for this project: \"official\" or \"obsolete\":\nkotlin.code.style=official\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "library/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "library/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\nandroid {\n    compileSdkVersion 28\n    buildToolsVersion \"30.0.2\"\n\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 28\n        versionCode 1\n        versionName \"1.0\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles 'consumer-rules.pro'\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n\n    compileOptions {\n        kotlinOptions.freeCompilerArgs += ['-module-name', \"com.zhangzheng.superxml\"]\n    }\n\n}\n\ndependencies {\n    compileOnly \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n}\n\n\n\n/** 以下开始是将Android Library上传到JCenter的相关配置**/\n\napply plugin: 'com.github.dcendents.android-maven'\napply plugin: 'com.jfrog.bintray'\n\n//项目主页\ndef siteUrl = 'https://github.com/long8313002/SuperXml'\n//项目的版本控制地址\ndef gitUrl = 'https://github.com/long8313002/SuperXml'\n\n//发布到组织名称名字，必须填写\ngroup = \"com.zhangzheng.superxml\"\n//发布到JCenter上的项目名字，必须填写\ndef libName = \"SuperXml\"\n// 版本号，下次更新是只需要更改版本号即可\nversion = \"1.1.4\"\n/**  上面配置后上传至JCenter后的编译路径是这样的： compile 'group:libName:version'  **/\n\n//生成源文件\ntask sourcesJar(type: Jar) {\n    from android.sourceSets.main.java.srcDirs\n    classifier = 'sources'\n}\n//生成文档\ntask javadoc(type: Javadoc) {\n    source = android.sourceSets.main.java.srcDirs\n    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))\n    options.encoding \"UTF-8\"\n    options.charSet 'UTF-8'\n    options.author true\n    options.version true\n    options.links \"https://github.com/long8313002/CrashProtect\"\n    failOnError false\n}\n\n//文档打包成jar\ntask javadocJar(type: Jar, dependsOn: javadoc) {\n    classifier = 'javadoc'\n    from javadoc.destinationDir\n}\n//拷贝javadoc文件\ntask copyDoc(type: Copy) {\n    from \"${buildDir}/docs/\"\n    into \"docs\"\n}\n\n//上传到jCenter所需要的源码文件\nartifacts {\n    archives javadocJar\n    archives sourcesJar\n}\n\n// 配置maven库，生成POM.xml文件\ninstall {\n    repositories.mavenInstaller {\n        // This generates POM.xml with proper parameters\n        pom {\n            project {\n                packaging 'aar'\n                name 'SuperXml'\n                url siteUrl\n                licenses {\n                    license {\n                        name 'The Apache Software License, Version 2.0'\n                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'\n                    }\n                }\n                developers {\n                    developer {\n                        id 'zhangzheng'\n                        name 'zhangzheng'\n                        email 'zhangzheng@xyz.cn'\n                    }\n                }\n                scm {\n                    connection gitUrl\n                    developerConnection gitUrl\n                    url siteUrl\n                }\n            }\n        }\n    }\n}\n\n//上传到JCenter\nProperties properties = new Properties()\nproperties.load(project.rootProject.file('local.properties').newDataInputStream())\nbintray {\n    user = properties.getProperty(\"bintray.user\")    //读取 local.properties 文件里面的 bintray.user\n    key = properties.getProperty(\"bintray.apikey\")   //读取 local.properties 文件里面的 bintray.apikey\n    println(\"-----\"+user+\"-----\"+key)\n    configurations = ['archives']\n    pkg {\n        repo = \"maven\"\n        name = libName    //发布到JCenter上的项目名字，必须填写\n        desc = 'SuperXml'    //项目描述\n        websiteUrl = siteUrl\n        vcsUrl = gitUrl\n        licenses = [\"Apache-2.0\"]\n        publish = true\n    }\n}"
  },
  {
    "path": "library/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "library/src/androidTest/java/com/zhangzheng/superxml/library/ExampleInstrumentedTest.kt",
    "content": "package com.zhangzheng.superxml.library\n\nimport androidx.test.platform.app.InstrumentationRegistry\nimport androidx.test.ext.junit.runners.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getInstrumentation().targetContext\n        assertEquals(\"com.zhangzheng.superxml.library.test\", appContext.packageName)\n    }\n}\n"
  },
  {
    "path": "library/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.zhangzheng.superxml.library\" />\n"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/LayoutInflateFactoryProxy.kt",
    "content": "package com.zhangzheng.superxml.library\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport java.lang.Exception\n\n\n\ninternal class LayoutInflateFactoryProxy(layoutInflater: LayoutInflater, private var service:IService ): LayoutInflater.Factory2 {\n\n    interface IService {\n        fun hasDecorate(attrs: AttributeSet): Boolean\n\n        fun decorate(view: View):View\n    }\n\n    private var factory = layoutInflater.factory\n    private var factory2 = layoutInflater.factory2\n    private var cloneLayoutInflate = layoutInflater.cloneInContext(layoutInflater.context)\n\n    override fun onCreateView(parent: View?, name: String?, context: Context?,\n        attrs: AttributeSet?): View? {\n\n        if(attrs==null||!service.hasDecorate(attrs)){\n            return null\n        }\n\n        var view = factory2?.onCreateView(parent, name, context, attrs)\n        if (view == null) {\n            view = factory?.onCreateView(name, context, attrs)\n        }\n        if (view == null) {\n            view = createView(name, null, attrs)\n        }\n        if (view == null) {\n            view = createView(name, \"android.widget.\", attrs)\n        }\n        if (view == null) {\n            view = createView(name, \"android.view.\", attrs)\n        }\n\n        if (view == null) {\n            view = compensateCreateView(name,context,attrs)\n        }\n\n\n\n        if (view != null) {\n            view = service.decorate(view)\n        }\n\n        return view\n    }\n\n    private fun compensateCreateView(name: String?, context: Context?, attrs: AttributeSet?): View? {\n        if (name == null || context == null || attrs == null) {\n            return null\n        }\n        var view = reflexCreateView(name, context, attrs)\n        if (view == null) {\n            view = reflexCreateView(\"android.widget.$name\", context, attrs)\n        }\n        if (view == null) {\n            view = reflexCreateView(\"android.view.$name\", context, attrs)\n        }\n        return view\n    }\n\n    private fun reflexCreateView(name: String, context: Context, attrs: AttributeSet): View? {\n        try {\n            val clazz = Class.forName(name)\n            val constructor = clazz.getConstructor(Context::class.java, AttributeSet::class.java)\n            return constructor.newInstance(context, attrs) as View\n        } catch (e: Exception) {\n\n        }\n        return null\n    }\n\n    private fun createView(name: String?, prefix: String?, attrs: AttributeSet?): View? {\n        return try {\n            cloneLayoutInflate.createView(name, prefix, attrs)\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    override fun onCreateView(name: String?, context: Context?, attrs: AttributeSet?) =\n        onCreateView(null, name, context, attrs)\n\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/SuperXml.kt",
    "content": "package com.zhangzheng.superxml.library\n\nimport android.app.Activity\nimport android.app.Application\nimport android.os.Bundle\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport com.zhangzheng.superxml.library.decorate.IDecorateView\nimport com.zhangzheng.superxml.library.decorate.wrap.IWrapDecorateView\nimport com.zhangzheng.superxml.library.decorate.wrap.coverchildren.IChildViewParse\nimport com.zhangzheng.superxml.library.decorate.wrap.coverchildren.addCoverChildViewParse\n\nobject SuperXml {\n\n    fun addDecorate(decorate: IWrapDecorateView) = ViewDecorateManager.addDecorate(decorate)\n\n    fun addDecorate(decorate: IDecorateView) = ViewDecorateManager.addDecorate(decorate)\n\n    fun addCoverAttributeParse(parse: IChildViewParse){\n        addCoverChildViewParse(parse)\n    }\n\n    fun init(app: Application) {\n        app.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {\n            override fun onActivityCreated(p0: Activity, p1: Bundle?) = hookActivityLayout(p0)\n            override fun onActivityPaused(p0: Activity) = Unit\n            override fun onActivityStarted(p0: Activity) = Unit\n            override fun onActivityDestroyed(p0: Activity) = Unit\n            override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) = Unit\n            override fun onActivityStopped(p0: Activity) = Unit\n            override fun onActivityResumed(p0: Activity) = Unit\n        })\n    }\n\n    private fun hookActivityLayout(activity: Activity) {\n        val layoutInflater = LayoutInflater.from(activity)\n        setLayoutInflateAllowState(layoutInflater, true)\n        layoutInflater.factory2 =\n            LayoutInflateFactoryProxy(layoutInflater, object : LayoutInflateFactoryProxy.IService {\n                override fun hasDecorate(attrs: AttributeSet) =\n                    ViewDecorateManager.hasDecorate(activity, attrs)\n\n                override fun decorate(view: View) = ViewDecorateManager.decorate(view)\n            })\n        setLayoutInflateAllowState(layoutInflater, false)\n    }\n\n    private fun setLayoutInflateAllowState(layoutInflater: LayoutInflater, isAllow: Boolean) {\n        val mFactorySet = LayoutInflater::class.java.getDeclaredField(\"mFactorySet\")\n        mFactorySet.isAccessible = true\n        mFactorySet.set(layoutInflater, !isAllow)\n    }\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/ViewDecorateManager.kt",
    "content": "package com.zhangzheng.superxml.library\n\nimport android.content.Context\nimport android.content.res.TypedArray\nimport android.util.AttributeSet\nimport android.view.View\nimport com.zhangzheng.superxml.library.decorate.*\nimport com.zhangzheng.superxml.library.decorate.RadiusDecorate\nimport com.zhangzheng.superxml.library.decorate.SrcRadiusDecorate\nimport com.zhangzheng.superxml.library.decorate.wrap.CoverChildrenWrapDecorate\nimport com.zhangzheng.superxml.library.decorate.wrap.DottedLineWrapDecorate\nimport com.zhangzheng.superxml.library.decorate.wrap.IWrapDecorateView\nimport com.zhangzheng.superxml.library.decorate.wrap.ScrollWrapDecorate\n\ninternal object ViewDecorateManager {\n\n    private val decorateList = arrayListOf(\n        RadiusDecorate(),\n        SrcRadiusDecorate(),\n        BackgroundPressedDecorate(),\n        BackgroundSelectedDecorate(),\n        BackgroundEnableDecorate(),\n        TextColorEnableDecorate(),\n        TextColorPresenterDecorate(),\n        TextColorSelectedDecorate(),\n        BorderDecorate()\n    )\n\n    private val wrapDecorateList = arrayListOf(\n        ScrollWrapDecorate(),\n        DottedLineWrapDecorate(),\n        CoverChildrenWrapDecorate()\n    )\n\n    fun addDecorate(decorate: IWrapDecorateView){\n        wrapDecorateList.add(decorate)\n    }\n\n    fun addDecorate(decorate:IDecorateView){\n        decorateList.add(decorate)\n    }\n\n\n    fun hasDecorate(context: Context, attributeSet: AttributeSet): Boolean {\n        val typedArray: TypedArray = context.obtainStyledAttributes(\n            attributeSet, R.styleable.decorate_view\n        )\n\n        var hasDecorateInfo = false\n        (decorateList + wrapDecorateList).forEach {\n            it.attributeSet = attributeSet\n            if (it.initExtraInfo(typedArray)) {\n                hasDecorateInfo = true\n                it.hasExtraInfo = true\n            } else {\n                it.hasExtraInfo = false\n            }\n        }\n\n        typedArray.recycle()\n\n        return hasDecorateInfo\n    }\n\n    fun decorate(view: View): View {\n\n        decorateList.forEach {\n            if (it.hasExtraInfo) {\n                it.decorate(view)\n            }\n        }\n\n        var wrapView = view\n        wrapDecorateList.forEach {\n            if (it.hasExtraInfo) {\n                wrapView = it.decorateView(wrapView)\n            }\n        }\n        return wrapView\n    }\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/BackgroundEnableDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.graphics.drawable.StateListDrawable\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.ext.*\n\n\ninternal class BackgroundEnableDecorate(var drawable: StateListDrawable? = null) : IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        val radius = typedArray.getDimension(R.styleable.decorate_view_layout_radius,0f)\n\n        val enable = createRadiusDrawable(radius,typedArray.getDrawable(\n            R.styleable.decorate_view_layout_background_enableTrue\n        ))\n        val normal = createRadiusDrawable(radius,typedArray.getDrawable(\n            R.styleable.decorate_view_layout_background_enableFalse\n        ))\n        if (enable == null || normal == null) {\n            return false\n        }\n\n        drawable = StateListDrawable()\n        drawable?.addState(intArrayOf(android.R.attr.state_enabled), enable)\n        drawable?.addState(intArrayOf(-android.R.attr.state_enabled), normal)\n        return true\n    }\n\n\n    override fun decorate(view: View) {\n        view.background = drawable\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/BackgroundPressedDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.graphics.drawable.StateListDrawable\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.ext.createRadiusDrawable\n\n\ninternal class BackgroundPressedDecorate(var drawable: StateListDrawable? = null) :\n    IDecorateView() {\n\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        val radius = typedArray.getDimension(R.styleable.decorate_view_layout_radius, 0f)\n\n        val press = createRadiusDrawable(\n            radius, typedArray.getDrawable(\n                R.styleable.decorate_view_layout_background_pressedTrue\n            )\n        )\n        val normal = createRadiusDrawable(\n            radius, typedArray.getDrawable(\n                R.styleable.decorate_view_layout_background_pressedFalse\n            )\n        )\n        if (press == null || normal == null) {\n            return false\n        }\n\n        drawable = StateListDrawable()\n        drawable?.addState(intArrayOf(android.R.attr.state_pressed), press)\n        drawable?.addState(intArrayOf(-android.R.attr.state_pressed), normal)\n        return true\n    }\n\n    override fun decorate(view: View) {\n        view.background = drawable\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/BackgroundSelectedDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.graphics.drawable.StateListDrawable\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.ext.createRadiusDrawable\n\n\ninternal class BackgroundSelectedDecorate(var drawable: StateListDrawable? = null) :\n    IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n\n        val radius = typedArray.getDimension(R.styleable.decorate_view_layout_radius, 0f)\n\n        val selected = createRadiusDrawable(\n            radius, typedArray.getDrawable(\n                R.styleable.decorate_view_layout_background_selectedTrue\n            )\n        )\n\n        val normal = createRadiusDrawable(\n            radius, typedArray.getDrawable(\n                R.styleable.decorate_view_layout_background_selectedFalse\n            )\n        )\n\n        if (selected == null || normal == null) {\n            return false\n        }\n\n        drawable = StateListDrawable()\n        drawable?.addState(intArrayOf(android.R.attr.state_selected), selected)\n        drawable?.addState(intArrayOf(-android.R.attr.state_selected), normal)\n        return true\n    }\n\n    override fun decorate(view: View) {\n        view.background = drawable\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/BorderDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.ext.setBorder\n\ninternal class BorderDecorate : IDecorateView() {\n\n    private var borderColor = 0\n    private var borderWidth = 0\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        borderWidth = typedArray.getDimension(\n            R.styleable.decorate_view_layout_border_width, 0f\n        ).toInt()\n\n        borderColor = typedArray.getColor(\n            R.styleable.decorate_view_layout_border_color, 0\n        )\n\n        return borderWidth != 0 && borderColor != 0\n    }\n\n    override fun decorate(view: View) {\n\n        view.setBorder(borderWidth,borderColor)\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/IDecorateView.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.util.AttributeSet\nimport android.view.View\n\n\nabstract class IDecorateView {\n\n    var hasExtraInfo: Boolean = false\n    var attributeSet: AttributeSet? = null\n\n    /**\n     * 初始化解析额外添加的信息\n     * @return 是否包含额外信息\n     */\n    abstract fun initExtraInfo(typedArray: TypedArray): Boolean\n\n    abstract fun decorate(view: View)\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/RadiusDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.ext.setRadius\n\ninternal class RadiusDecorate(var radius: Float = 0f) : IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        radius = typedArray.getDimension(R.styleable.decorate_view_layout_radius,0f)\n        return radius > 0\n    }\n\n    override fun decorate(view: View)= view.setRadius(radius)\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/SrcRadiusDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.TypedArray\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.ext.setRadius\nimport com.zhangzheng.superxml.library.ext.setSrcRadius\n\ninternal class SrcRadiusDecorate(var radius: Float = 0f) : IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        radius = typedArray.getDimension(R.styleable.decorate_view_layout_src_radius,0f)\n        return radius > 0\n    }\n\n    override fun decorate(view: View)= view.setSrcRadius(radius)\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/TextColorEnableDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.ColorStateList\nimport android.content.res.TypedArray\nimport android.view.View\nimport android.widget.TextView\nimport com.zhangzheng.superxml.library.R\n\n\ninternal class TextColorEnableDecorate(var color: ColorStateList? = null) : IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        val enable = typedArray.getColor(\n            R.styleable.decorate_view_layout_textColor_enableTrue,0)\n        val normal = typedArray.getColor(\n            R.styleable.decorate_view_layout_textColor_enableFalse,0)\n        if (enable == 0 || normal == 0) {\n            return false\n        }\n\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_enabled)\n        states[1] = intArrayOf(-android.R.attr.state_enabled)\n        color = ColorStateList(states, intArrayOf(enable,normal))\n\n        return true\n    }\n\n    override fun decorate(view: View) {\n        if(view is TextView){\n            view.setTextColor(color)\n        }\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/TextColorPresenterDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.ColorStateList\nimport android.content.res.TypedArray\nimport android.view.View\nimport android.widget.TextView\nimport com.zhangzheng.superxml.library.R\n\n\ninternal class TextColorPresenterDecorate(var color: ColorStateList? = null) : IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        val pressed = typedArray.getColor(\n            R.styleable.decorate_view_layout_textColor_pressedTrue,0)\n        val normal = typedArray.getColor(\n            R.styleable.decorate_view_layout_textColor_pressedFalse,0)\n        if (pressed == 0 || normal == 0) {\n            return false\n        }\n\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_pressed)\n        states[1] = intArrayOf(-android.R.attr.state_pressed)\n        color = ColorStateList(states, intArrayOf(pressed,normal))\n\n\n        return true\n    }\n\n    override fun decorate(view: View) {\n        if(view is TextView){\n            view.setTextColor(color)\n        }\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/TextColorSelectedDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate\n\nimport android.content.res.ColorStateList\nimport android.content.res.TypedArray\nimport android.view.View\nimport android.widget.TextView\nimport com.zhangzheng.superxml.library.R\n\n\ninternal class TextColorSelectedDecorate(var color: ColorStateList? = null) : IDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        val selected = typedArray.getColor(\n            R.styleable.decorate_view_layout_textColor_selectedTrue,0)\n        val normal = typedArray.getColor(\n            R.styleable.decorate_view_layout_textColor_selectedFalse,0)\n        if (selected == 0 || normal == 0) {\n            return false\n        }\n\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_selected)\n        states[1] = intArrayOf(-android.R.attr.state_selected)\n        color = ColorStateList(states, intArrayOf(selected,normal))\n\n        return true\n    }\n\n    override fun decorate(view: View) {\n        if(view is TextView){\n            view.setTextColor(color)\n        }\n    }\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/CoverChildrenWrapDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap\n\nimport android.content.res.TypedArray\nimport android.view.View\nimport android.view.ViewGroup\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.decorate.wrap.coverchildren.CoverChildrenLayout\n\nclass CoverChildrenWrapDecorate : IWrapDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray) =\n        typedArray.getBoolean(R.styleable.decorate_view_layout_cover_children, false)\n\n    override fun decorateView(view: View) =\n        if (view !is ViewGroup) {\n            view\n        } else {\n            CoverChildrenLayout(view, attributeSet)\n        }\n\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/DottedLineWrapDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap\n\nimport android.content.res.TypedArray\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\nimport com.zhangzheng.superxml.library.view.DottedLineView\n\nclass DottedLineWrapDecorate : IWrapDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray)=\n         typedArray.getDimension(R.styleable.decorate_view_layout_dash_height, 0f) > 0\n                && typedArray.getDimension(R.styleable.decorate_view_layout_dash_width, 0f) > 0\n\n\n    override fun decorateView(view: View): View {\n        return DottedLineView(view.context, attributeSet).also {\n            it.id = view.id\n        }\n    }\n\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/IWrapDecorateView.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap\n\nimport android.view.View\nimport com.zhangzheng.superxml.library.decorate.IDecorateView\n\nabstract class IWrapDecorateView :\n    IDecorateView(){\n\n    override fun decorate(view: View) =Unit\n\n    abstract fun decorateView(view: View):View\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/ScrollWrapDecorate.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap\n\nimport android.content.res.TypedArray\nimport android.graphics.Color\nimport android.util.AttributeSet\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.ScrollView\nimport com.zhangzheng.superxml.library.R\n\nprivate class ScrollViewProxy(val view: View,attributeSet: AttributeSet?) : ScrollView(view.context,attributeSet) {\n\n    init {\n        setBackgroundColor(Color.TRANSPARENT)\n    }\n\n    override fun addView(child: View?, index: Int, params: ViewGroup.LayoutParams?) {\n        if (child?.parent != null) {\n            return\n        }\n        if (child == view) {\n            super.addView(child, index, params)\n        } else if (view is ViewGroup) {\n            view.addView(child, index, params)\n        }\n    }\n\n    override fun onFinishInflate() {\n        super.onFinishInflate()\n        addView(view)\n        id = R.id.decorateScrollView\n    }\n}\n\n\ninternal class ScrollWrapDecorate(var canScroll: Boolean = false) : IWrapDecorateView() {\n\n    override fun initExtraInfo(typedArray: TypedArray): Boolean {\n        canScroll = typedArray.getBoolean(R.styleable.decorate_view_layout_canScroll, false)\n        return canScroll\n    }\n\n    override fun decorateView(view: View): View {\n        return ScrollViewProxy(\n            view,\n            attributeSet\n        )\n    }\n\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/coverchildren/AbsChildViewParse.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap.coverchildren\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.View\n\nabstract class AbsChildViewParse<T : View> : IChildViewParse {\n\n    inner class AttributeInfo<M>(\n        var name: String,\n        var getAttr: T.() -> M,\n        var setAttr: T.(value: M) -> Unit\n    )\n\n    private lateinit var infoView: T\n    private lateinit var coverAttribute: MutableList<*>\n    private lateinit var updateAttribute: MutableList<*>\n    protected lateinit var context:Context\n\n    override fun init(context: Context) {\n        this.context = context\n    }\n\n    override fun parentAttribute(attributeSet: AttributeSet?) {\n        infoView = createInfoView(context, attributeSet)\n        coverAttribute = coverAttribute()\n        filterAttribute(coverAttribute,attributeSet, false)\n    }\n\n    private fun filterAttribute(attributeList: MutableList<*>, attributeSet: AttributeSet?, hasAttrFilter: Boolean) {\n        val iterator = attributeList.iterator()\n        while (iterator.hasNext()) {\n            val item = iterator.next() as AttributeInfo<Any>\n            val name = item.name\n            if ((hasAttrFilter && hasAttribute(attributeSet, name))\n                || (!hasAttrFilter && !hasAttribute(attributeSet, name))\n            ) {\n                iterator.remove()\n            }\n        }\n    }\n\n    private fun hasAttribute(attributeSet: AttributeSet?, name: String): Boolean {\n        val nameSpace = \"http://schemas.android.com/apk/res/android\"\n        return attributeSet?.getAttributeValue(nameSpace, name)?.isNotEmpty() == true\n    }\n\n    override fun childAttribute(childViewAttr: AttributeSet?) {\n        updateAttribute = ArrayList(coverAttribute)\n        filterAttribute(updateAttribute,childViewAttr, true)\n    }\n\n    abstract fun createInfoView(context: Context, attributeSet: AttributeSet?): T\n\n    abstract fun coverAttribute(): MutableList<*>\n\n    override fun updateChildView(childView: View) {\n        updateAttribute.forEach {\n            try {\n                it as AttributeInfo<Any>\n                val value = it.getAttr(infoView)\n                it.setAttr(childView as T, value)\n            }catch (e:ClassCastException){\n\n            }\n        }\n    }\n\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/coverchildren/CoverChildrenLayout.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap.coverchildren\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\n\n interface IChildViewParse {\n\n     fun init(context: Context)\n\n    fun parentAttribute(attributeSet: AttributeSet?)\n\n    fun childAttribute(childViewAttr: AttributeSet?)\n\n    fun updateChildView(view: View)\n}\n\nprivate val childViewParseList = mutableListOf<IChildViewParse>(\n    TextViewCoverParse(),\n    ImageViewCoverParse()\n)\n\nfun addCoverChildViewParse(parse:IChildViewParse){\n    childViewParseList.add(parse)\n}\n\nclass CoverChildrenLayout(var baseView: ViewGroup, attributeSet: AttributeSet?) : FrameLayout(baseView.context) {\n\n    init {\n        childViewParseList.forEach { it.init(context) }\n        childViewParseList.forEach { it.parentAttribute(attributeSet) }\n    }\n\n    override fun addView(child: View?, index: Int, params: ViewGroup.LayoutParams?) {\n        baseView.addView(child, index, params)\n        childViewParseList.forEach {\n            if (child != null) {\n                it.updateChildView(child)\n            }\n        }\n    }\n\n    override fun onAttachedToWindow() {\n        super.onAttachedToWindow()\n        (parent as ViewGroup).addView(baseView, removeSelf())\n    }\n\n    override fun generateLayoutParams(attrs: AttributeSet?): LayoutParams {\n        childViewParseList.forEach { it.childAttribute(attrs) }\n        return super.generateLayoutParams(attrs)\n    }\n\n    private fun removeSelf(): Int {\n        val parent = parent as ViewGroup\n        var index = 0\n        for (i in 0 until parent.childCount) {\n            if (parent.getChildAt(i) == this) {\n                parent.removeView(this)\n                break\n            }\n            index++\n        }\n        return index\n    }\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/coverchildren/ImageViewCoverParse.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap.coverchildren\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.widget.ImageView\n\nclass ImageViewCoverParse : AbsChildViewParse<ImageView>() {\n\n    override fun createInfoView(context: Context, attributeSet: AttributeSet?) = ImageView(context,attributeSet)\n\n    override fun coverAttribute(): MutableList<*> = mutableListOf(\n        AttributeInfo(\"src\",{ drawable }) { drawable -> setImageDrawable(drawable) },\n        AttributeInfo(\"scaleType\",{ scaleType }) { scaleType -> setScaleType(scaleType) }\n    )\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/decorate/wrap/coverchildren/TextViewCoverParse.kt",
    "content": "package com.zhangzheng.superxml.library.decorate.wrap.coverchildren\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.widget.TextView\n\nclass TextViewCoverParse : AbsChildViewParse<TextView>() {\n\n    override fun createInfoView(context: Context, attributeSet: AttributeSet?): TextView =\n        TextView(context, attributeSet)\n\n    override fun coverAttribute(): MutableList<*> = mutableListOf(\n        AttributeInfo(\"textSize\",{ textSize }) { value -> textSize = value },\n        AttributeInfo(\"textColor\",{ textColors }) { value -> setTextColor(value) },\n        AttributeInfo(\"text\",{ text }) { text -> setText(text) },\n        AttributeInfo(\"maxLines\",{ maxLines }) { maxLines -> setMaxLines(maxLines) },\n        AttributeInfo(\"maxEms\",{ maxEms }) { maxEms -> setMaxEms(maxEms) },\n        AttributeInfo(\"textColorHint\",{ hintTextColors }) { hintTextColors -> setHintTextColor(hintTextColors) },\n        AttributeInfo(\"hint\",{ hint }) { hint -> setHint(hint) },\n        AttributeInfo(\"textDirection\",{ textDirection }) { textDirection -> setTextDirection(textDirection) },\n        AttributeInfo(\"textStyle\",{ typeface }) { typeface -> setTypeface(typeface) },\n        AttributeInfo(\"capitalize\",{ inputType }) { inputType -> setInputType(inputType) }\n    )\n\n\n\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/ext/ViewBorderExt.kt",
    "content": "package com.zhangzheng.superxml.library.ext\n\nimport android.content.res.ColorStateList\nimport android.graphics.drawable.ColorDrawable\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.GradientDrawable\nimport android.view.View\n\nfun View.setBorder(width: Int, color: Int) {\n    background = getBorderBg(this, width, color)\n}\n\n\nprivate fun getBorderBg(view: View, width: Int, color: Int): Drawable {\n    if (view.background !is ColorDrawable && view.background !is GradientDrawable) {\n        return view.background\n    }\n\n    val drawable = if (view.background is GradientDrawable) {\n        view.background as GradientDrawable\n    } else GradientDrawable().also {\n        it.color = ColorStateList.valueOf((view.background as ColorDrawable).color)\n    }\n\n    return drawable.also {\n        it.setStroke(width, color)\n    }\n}"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/ext/ViewRadiusExt.kt",
    "content": "package com.zhangzheng.superxml.library.ext\n\nimport android.graphics.*\nimport android.graphics.drawable.BitmapDrawable\nimport android.graphics.drawable.ColorDrawable\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.GradientDrawable\nimport android.view.View\nimport android.widget.ImageView\n\n\nfun View.setRadius(radius: Float) {\n    val backgroundColor = getBackgroundColor(this)\n    val background = getBackground(this)\n    if (backgroundColor != null) {\n        this.background = getRoundRectBgByColorValue( backgroundColor, radius)\n    }else if(background!=null){\n        this.background = BitmapDrawable(toRoundCorner(background,radius))\n    }\n}\n\nfun View.setSrcRadius(radius: Float){\n\n    if(this is ImageView){\n        val src = drawable\n        if(src is BitmapDrawable){\n            setImageBitmap(toRoundCorner(src.bitmap,radius))\n        }\n    }\n}\n\ninternal fun createRadiusDrawable(radius: Float,drawable: Drawable?):Drawable?{\n    if(drawable is ColorDrawable){\n        return getRoundRectBgByColorValue( drawable.color, radius)\n    }\n\n    if(drawable is BitmapDrawable){\n        return BitmapDrawable(toRoundCorner(drawable.bitmap,radius))\n    }\n\n    return drawable\n}\n\n\n private fun getRoundRectBgByColorValue( color: Int, radius: Float) :Drawable{\n    return GradientDrawable().also {\n        it.shape = GradientDrawable.RECTANGLE\n        it.cornerRadius = radius\n        it.setColor(color)\n    }\n}\n\n\nprivate fun getBackgroundColor(view: View): Int? {\n    var bgColor: Int? = null\n    if (view.background is ColorDrawable) {\n        val colorDrawable = view.background as ColorDrawable\n        bgColor = colorDrawable.color\n    }\n    return bgColor\n}\n\nprivate fun getBackground(view: View): Bitmap? {\n    val background = view.background\n    return if (background is BitmapDrawable) {\n        background.bitmap\n    } else {\n        null\n    }\n}\n\nprivate fun toRoundCorner(bitmap: Bitmap, pixels: Float): Bitmap? {\n    val output =\n        Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)\n    val canvas = Canvas(output)\n    val paint = Paint()\n    val rect = Rect(0, 0, bitmap.width, bitmap.height)\n    val rectF = RectF(rect)\n    paint.isAntiAlias = true\n    canvas.drawARGB(0, 0, 0, 0)\n    canvas.drawRoundRect(rectF, pixels/2, pixels/2, paint)\n    paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)\n    canvas.drawBitmap(bitmap, rect, rect, paint)\n    return output\n}\n"
  },
  {
    "path": "library/src/main/java/com/zhangzheng/superxml/library/view/DottedLineView.kt",
    "content": "package com.zhangzheng.superxml.library.view\n\nimport android.content.Context\nimport android.content.res.TypedArray\nimport android.graphics.Canvas\nimport android.util.AttributeSet\nimport android.view.View\nimport com.zhangzheng.superxml.library.R\n\ninternal class DottedLineView : View {\n\n    private var dashWidth = 0\n    private var dashHeight = 0\n    private var dashGap = 0\n\n    constructor(context: Context?) : super(context)\n    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {\n        val typedArray: TypedArray =\n            context!!.obtainStyledAttributes(attrs, R.styleable.decorate_view)\n        dashWidth = typedArray.getDimension(\n            R.styleable.decorate_view_layout_dash_width, 0f\n        ).toInt()\n\n        dashHeight = typedArray.getDimension(\n            R.styleable.decorate_view_layout_dash_height, 0f\n        ).toInt()\n\n        dashGap = typedArray.getDimension(\n            R.styleable.decorate_view_layout_dash_gap, 0f\n        ).toInt()\n\n        typedArray.recycle()\n    }\n\n    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(\n        context,\n        attrs,\n        defStyleAttr\n    )\n\n\n    override fun onDraw(canvas: Canvas) {\n\n        background.setBounds(0, 0, dashWidth, dashHeight)\n        background.draw(canvas)\n\n        if (width > height) {\n            var translateX = 0\n            while (translateX <= width) {\n                canvas.translate((dashWidth + dashGap).toFloat(), 0f)\n                background.draw(canvas)\n                translateX += dashWidth + dashGap\n            }\n        }else{\n            var translateY = 0\n            while (translateY <= height) {\n                canvas.translate(0f, (dashHeight + dashGap).toFloat())\n                background.draw(canvas)\n                translateY += dashHeight + dashGap\n            }\n        }\n\n\n    }\n}"
  },
  {
    "path": "library/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"decorateScrollView\" type=\"id\"/>\n</resources>"
  },
  {
    "path": "library/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">library</string>\n</resources>\n"
  },
  {
    "path": "library/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <declare-styleable name=\"decorate_view\" tools:ignore=\"ResourceName\">\n        <attr name=\"layout_radius\" format=\"reference|dimension\" />\n        <attr name=\"layout_src_radius\" format=\"reference|dimension\" />\n\n        <attr name=\"layout_background_enableTrue\" format=\"reference|color\" />\n        <attr name=\"layout_background_enableFalse\" format=\"reference|color\" />\n\n        <attr name=\"layout_background_pressedTrue\" format=\"reference|color\" />\n        <attr name=\"layout_background_pressedFalse\" format=\"reference|color\" />\n\n        <attr name=\"layout_background_selectedTrue\" format=\"reference|color\" />\n        <attr name=\"layout_background_selectedFalse\" format=\"reference|color\" />\n\n\n        <attr name=\"layout_textColor_enableTrue\" format=\"reference|color\" />\n        <attr name=\"layout_textColor_enableFalse\" format=\"reference|color\" />\n\n        <attr name=\"layout_textColor_pressedTrue\" format=\"reference|color\" />\n        <attr name=\"layout_textColor_pressedFalse\" format=\"reference|color\" />\n\n        <attr name=\"layout_textColor_selectedTrue\" format=\"reference|color\" />\n        <attr name=\"layout_textColor_selectedFalse\" format=\"reference|color\" />\n\n        <attr name=\"layout_canScroll\" format=\"reference|boolean\" />\n\n\n        <attr name=\"layout_border_color\" format=\"reference|color\" />\n        <attr name=\"layout_border_width\" format=\"reference|dimension\" />\n\n        <attr name=\"layout_dash_width\" format=\"reference|dimension\" />\n        <attr name=\"layout_dash_height\" format=\"reference|dimension\" />\n        <attr name=\"layout_dash_gap\" format=\"reference|dimension\" />\n\n        <attr name=\"layout_cover_children\" format=\"boolean\"/>\n    </declare-styleable>\n\n</resources>"
  },
  {
    "path": "library/src/test/java/com/zhangzheng/superxml/library/ExampleUnitTest.kt",
    "content": "package com.zhangzheng.superxml.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app', ':library'\nrootProject.name='SuperXml'\n"
  }
]