[
  {
    "path": ".gitignore",
    "content": "\n/captures\n\n# Built application files\n*.apk\n*.ap_\n\n\n\n# Generated files\nbin/\ngen/\n\n# Gradle files\n.gradle/\n/build\n/*/build/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Proguard folder generated by Eclipse\nproguard/\n\n# Log Files\n*.log\n\n# Eclipse project files\n.classpath\n.project\n.settings/\n\n# Intellij project files\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# System files\n.DS_Store"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "README.md",
    "content": "# AndroidAutoLayout\n[DEPRECATED]Android屏幕适配方案，直接填写设计图上的像素尺寸即可完成适配。\n\n>目前没有精力，已停止维护，使用前务必看明白代码，明确该方案可以解决自身问题，有扩展代码能力，否则不建议使用。\n\n非常感谢 ： 吃土豆的人 的协作。\n\n\n>推荐使用[AndroidAutoSize](https://github.com/JessYanCoding/AndroidAutoSize)\n\nAndroidAutoSize目前作者一直在维护，私下也有一些交流，也是 AndroidAutoLayout 3年的使用者，自研了[AndroidAutoSize](https://github.com/JessYanCoding/AndroidAutoSize), 在目前本库已经没有精力维护的情况下，推荐使用；如果使用了本库，迁移成本也非常低,[迁移指南](https://github.com/JessYanCoding/AndroidAutoSize/issues/90)。\n\n\n\n## 效果图\n\n最大幅度解决适配问题，并且最大化方便开发者。\n\n\n\nso,看下用法：\n\n<img src=\"autolayout_08.png\"/>\n\n\n<img src=\"autolayout_09.png\"/>\n\n你没有看错，拿到设计稿，在布局文件里面直接填写对应的px即可，px:这里的px并非是Google不建议使用的px，在内部会进行转化处理。\n\nok，拿一些实际项目的页面，看下不同分辨率下的效果：\n\n左为：768 * 1280 ; 右为：1080 * 1920\n\n<img src=\"preview/preview_01.png\" width=\"800px\"/>\n\n<img src=\"preview/preview_02.png\" width=\"800px\"/>\n\n<img src=\"preview/preview_03.png\" width=\"800px\"/>\n\n\n\n上述两个机器的分辨率差距挺大了，但是完美实现了适配，最为重要的是：\n\n* 再也不用拿着设计稿去想这控件的宽高到底取多少dp\n* 再也不用去为多个屏幕去写多个dimens\n* 再也不用去计算百分比了（如果使用百分比控件完成适配）\n* 再也不用去跟UI MM去解释什么是dp了\n\n你所要做的就是抄抄设计稿上面的px，直接写入布局文件。\n\n还有很多好处，比如上面的Item里面元素比较多，如果标识的比较全面，一个FrameLayout，里面的View填写各种marginLeft,marginTop就能完美实现，几乎不需要嵌套了。\n\n## 引入\n\n* Android Studio\n\n将[autolayout](autolayout)引入\n\n```xml\ndependencies {\n    compile project(':autolayout')\n}\n```\n\n也可以直接\n\n```\ndependencies {\n    compile 'com.zhy:autolayout:1.4.5'\n}\n```\n\n* Eclipse\n\n建议使用As，方便版本更新。实在不行，只有复制粘贴源码了。\n\n## 用法\n\n### 第一步：\n\n在你的项目的AndroidManifest中注明你的`设计稿`的尺寸。\n\n```xml\n<meta-data android:name=\"design_width\" android:value=\"768\">\n</meta-data>\n<meta-data android:name=\"design_height\" android:value=\"1280\">\n</meta-data>\n    \n```\n\n### 第二步：\n\n让你的Activity继承自`AutoLayoutActivity`.\n\n\n非常简单的两个步骤，你就可以开始愉快的编写布局了，详细可以参考sample。\n\n\n\n## 其他用法\n\n如果你不希望继承`AutoLayoutActivity`，可以在编写布局文件时，将\n\n* LinearLayout -> AutoLinearLayout\n* RelativeLayout -> AutoRelativeLayout\n* FrameLayout -> AutoFrameLayout\n\n这样也可以完成适配。\n\n## 目前支持属性\n\n* layout_width\n* layout_height\n* layout_margin(left,top,right,bottom)\n* pading(left,top,right,bottom)\n* textSize\n* maxWidth, minWidth, maxHeight, minHeight\n\n\n## 配置\n\n默认使用的高度是设备的可用高度，也就是不包括状态栏和底部的操作栏的，如果你希望拿设备的物理高度进行百分比化：\n\n可以在Application的onCreate方法中进行设置:\n\n```java\npublic class UseDeviceSizeApplication extends Application\n{\n    @Override\n    public void onCreate()\n    {\n        super.onCreate();\n        AutoLayoutConifg.getInstance().useDeviceSize();\n    }\n}\n\n```\n\n## 预览\n\n大家都知道，写布局文件的时候，不能实时的去预览效果，那么体验真的是非常的不好，也在很大程度上降低开发效率，所以下面教大家如何用好，用对PreView（针对该库）。\n\n首先，你要记得你设计稿的尺寸，比如 `768 * 1280`\n\n然后在你的PreView面板，选择于设计图分辨率一致的设备：\n\n\n<img src=\"autolayout_07.png\" width=\"480px\"/>\n\n然后你就可以看到`最为精确的`预览了：\n\n<img src=\"autolayout_06.png\" width=\"480px\"/>\n\n两个注意事项：\n\n1. 你们UI给的设计图的尺寸并非是主流的设计图，该尺寸没找到，你可以自己去新建一个设备。\n2. 不要在PreView中去查看所有分辨率下的显示，是看不出来适配效果的，因为有些计算是动态的。\n\n## 扩展\n\n对于其他继承系统的FrameLayout、LinearLayout、RelativeLayout的控件，比如`CardView`，如果希望再其内部直接支持\"px\"百分比化，可以自己扩展，扩展方式为下面的代码，也可参考[issue#21](https://github.com/hongyangAndroid/AndroidAutoLayout/issues/21)：\n\n```\npackage com.zhy.sample.view;\n\nimport android.content.Context;\nimport android.support.v7.widget.CardView;\nimport android.util.AttributeSet;\n\nimport com.zhy.autolayout.AutoFrameLayout;\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\n\n/**\n * Created by zhy on 15/12/8.\n */\npublic class AutoCardView extends CardView\n{\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    public AutoCardView(Context context)\n    {\n        super(context);\n    }\n\n    public AutoCardView(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n    }\n\n    public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr)\n    {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new AutoFrameLayout.LayoutParams(getContext(), attrs);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n        if (!isInEditMode())\n        {\n            mHelper.adjustChildren();\n        }\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n\n}\n```\n\n\n## 注意事项\n\n### ListView、RecyclerView类的Item的适配\n\n**sample中包含ListView、RecyclerView例子，具体查看sample**\n\n* 对于ListView\n\n对于ListView这类控件的item，默认根局部写“px”进行适配是无效的，因为外层非AutoXXXLayout，而是ListView。但是，不用怕，一行代码就可以支持了：\n\n```java\n@Override\npublic View getView(int position, View convertView, ViewGroup parent)\n{\n    ViewHolder holder = null;\n    if (convertView == null)\n    {\n        holder = new ViewHolder();\n        convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);\n        convertView.setTag(holder);\n        //对于listview，注意添加这一行，即可在item上使用高度\n        AutoUtils.autoSize(convertView);\n    } else\n    {\n        holder = (ViewHolder) convertView.getTag();\n    }\n\n    return convertView;\n}\n```\n\n注意` AutoUtils.autoSize(convertView);`这行代码的位置即可。demo中也有相关实例。\n\n\n* 对于RecyclerView\n\n```java\npublic ViewHolder(View itemView)\n{\n      super(itemView);\n      AutoUtils.autoSize(itemView);\n}\n\n//...\n@Override\npublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)\n{\n     View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, parent, false);\n     return new ViewHolder(convertView);\n}\n\n```\n\n一定要记得`LayoutInflater.from(mContext).inflate`使用三个参数的方法！\n\n\n### 指定设置的值参考宽度或者高度\n\n由于该库的特点，布局文件中宽高上的1px是不相等的，于是如果需要宽高保持一致的情况，布局中使用属性：\n\n `app:layout_auto_basewidth=\"height\"`，代表height上编写的像素值参考宽度。\n \n `app:layout_auto_baseheight=\"width\"`，代表width上编写的像素值参考高度。\n\n如果需要指定多个值参考宽度即：\n\n`app:layout_auto_basewidth=\"height|padding\"`\n\n用|隔开，类似gravity的用法，取值为：\n\n* width,height\n* margin,marginLeft,marginTop,marginRight,marginBottom\n* padding,paddingLeft,paddingTop,paddingRight,paddingBottom\n* textSize.\n\n### TextView的高度问题\n\n设计稿一般只会标识一个字体的大小，比如你设置textSize=\"20px\"，实际上TextView所占据的高度肯定大于20px，字的上下都会有一定的间隙，所以一定要灵活去写字体的高度，比如对于text上下的margin可以选择尽可能小一点。或者选择别的约束条件去定位（比如上例，选择了marginBottom）\n\n\n## 常见问题\n\n###(1)导入后出现`org/gradle/api/publication/maven/internal/DefaultMavenFactory`\n\n最简单的方式，通过`compile 'com.zhy:autolayout:x.x.x'`进行依赖使用，如果一定要以module引用，参考该issue[#74](https://github.com/hongyangAndroid/AndroidAutoLayout/issues/74)\n\n###(2)RadioGroup,Toolbar等控件中的子View无法完成适配\n\n这个其实上文已经提到过了，需要自己扩展。不过这个很多使用者贡献了他们的扩展类可以直接使用，\n参考[autolayout-widget](https://github.com/hongyangAndroid/AndroidAutoLayout/tree/master/widgetsample),\n如果没有发现你需要的容器类，那么你就真的需要自行扩展了，当然如果你完成了扩展，可以给我发个PR，或者让我知道，我可以加入到\n`autolayout-widget`中方便他人，ps:需要用到哪个copy就好了，不要直接引用`autolayout-widget`，因为其引用了大量的库，可能很多\n库你是用不到的。\n\n###(3)java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.\n\n这个问题是因为默认AutoLayoutActivity会继承自AppCompatActivity，所以默认需要设置\nTheme.AppCompat的theme；\n\n如果你使用的依旧是FragmentActivity等，且不考虑使用AppCompatActivity，\n你可以选择自己编写一个`MyAutoLayoutActivity extends 目前你使用的Activity基类`，例如\n`MyAutoLayoutActivity extends FragmentActivity`，然后将该库中AutoLayoutActivity中的逻辑\n拷贝进去即可，以后你就继承你的`MyAutoLayoutActivity`就好了。\n\nps：还是建议尽快更新SDK版本使用`AppCompatActivity`.\n\n\n\n## 其他信息\n\n作者信息：\n\n* [hongyangAndroid](https://github.com/hongyangAndroid)\n* 吃土豆的人\n\n\n灵感来自：\n\n* [android-percent-support-lib-sample](https://github.com/JulienGenoud/android-percent-support-lib-sample)\n* [android-percent-support-extend](https://github.com/hongyangAndroid/android-percent-support-extend)\n* [Android 屏幕适配方案](http://blog.csdn.net/lmj623565791/article/details/45460089)\n\n\n\n\n\n\n\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        applicationId \"zhy.com.autolayout\"\n        minSdkVersion 10\n        targetSdkVersion 23\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:23.1.0'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "app/src/androidTest/java/zhy/com/autolayout/ApplicationTest.java",
    "content": "package zhy.com.autolayout;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application>\n{\n    public ApplicationTest()\n    {\n        super(Application.class);\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=\"zhy.com.autolayout\" >\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\" >\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"@string/app_name\" >\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>\n"
  },
  {
    "path": "app/src/main/java/zhy/com/autolayout/MainActivity.java",
    "content": "package zhy.com.autolayout;\n\nimport android.support.v7.app.AppCompatActivity;\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuItem;\n\npublic class MainActivity extends AppCompatActivity\n{\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState)\n    {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu)\n    {\n        // Inflate the menu; this adds items to the action bar if it is present.\n        getMenuInflater().inflate(R.menu.menu_main, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item)\n    {\n        // Handle action bar item clicks here. The action bar will\n        // automatically handle clicks on the Home/Up button, so long\n        // as you specify a parent activity in AndroidManifest.xml.\n        int id = item.getItemId();\n\n        //noinspection SimplifiableIfStatement\n        if (id == R.id.action_settings)\n        {\n            return true;\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n                xmlns:tools=\"http://schemas.android.com/tools\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:paddingLeft=\"@dimen/activity_horizontal_margin\"\n                android:paddingRight=\"@dimen/activity_horizontal_margin\"\n                android:paddingTop=\"@dimen/activity_vertical_margin\"\n                android:paddingBottom=\"@dimen/activity_vertical_margin\"\n                tools:context=\".MainActivity\">\n\n    <TextView\n        android:text=\"@string/hello_world\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"/>\n\n</RelativeLayout>\n"
  },
  {
    "path": "app/src/main/res/menu/menu_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n      xmlns:tools=\"http://schemas.android.com/tools\"\n      tools:context=\".MainActivity\">\n    <item android:id=\"@+id/action_settings\"\n          android:title=\"@string/action_settings\"\n          android:orderInCategory=\"100\"\n          app:showAsAction=\"never\"/>\n</menu>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">AutoLayout</string>\n\n    <string name=\"hello_world\">Hello world!</string>\n    <string name=\"action_settings\">Settings</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    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "autolayout/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "autolayout/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.github.dcendents.android-maven'\napply plugin: 'com.jfrog.bintray'\n\nversion = \"1.4.5\"\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        minSdkVersion 7\n        targetSdkVersion 23\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndef siteUrl = 'https://github.com/hongyangAndroid/AndroidAutoLayout'                        // #CONFIG# // project homepage\ndef gitUrl = 'https://github.com/hongyangAndroid/AndroidAutoLayout.git'                     // #CONFIG# // project git\ngroup = \"com.zhy\"\n\ninstall {\n    repositories.mavenInstaller {\n        // This generates POM.xml with proper parameters\n        pom {\n            project {\n                packaging 'aar'\n                name 'AutoLayout'                                   // #CONFIG# // project title\n                url siteUrl\n                // Set your license\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 'hongyangAndroid'                                           // #CONFIG# // your user id (you can write your nickname)\n                        name 'ZhangHongyang'                                       // #CONFIG# // your user name\n                        email '623565791@qq.com'                               // #CONFIG# // your email\n                    }\n                }\n                scm {\n                    connection gitUrl\n                    developerConnection gitUrl\n                    url siteUrl\n                }\n            }\n        }\n    }\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}\n\ntask javadocJar(type: Jar, dependsOn: javadoc) {\n    classifier = 'javadoc'\n    from javadoc.destinationDir\n}\n\nartifacts {\n    archives javadocJar\n    archives sourcesJar\n}\nProperties properties = new Properties()\nproperties.load(project.rootProject.file('local.properties').newDataInputStream())\nbintray {\n    user = properties.getProperty(\"bintray.user\")\n    key = properties.getProperty(\"bintray.apikey\")\n    configurations = ['archives']\n    pkg {\n        repo = \"maven\"\n        name = \"autolayout\"                                                 // #CONFIG# project name in jcenter\n        websiteUrl = siteUrl\n        vcsUrl = gitUrl\n        licenses = [\"Apache-2.0\"]\n        publish = true\n    }\n}\n\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:23.0.1'\n}\n"
  },
  {
    "path": "autolayout/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "autolayout/src/androidTest/java/zhy/com/autolayout/ApplicationTest.java",
    "content": "package zhy.com.autolayout;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application>\n{\n    public ApplicationTest()\n    {\n        super(Application.class);\n    }\n}"
  },
  {
    "path": "autolayout/src/main/AndroidManifest.xml",
    "content": "<manifest package=\"com.zhy.autolayout\">\n\n\n</manifest>\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/AutoFrameLayout.java",
    "content": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.zhy.autolayout;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.os.Build;\nimport android.util.AttributeSet;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\n\npublic class AutoFrameLayout extends FrameLayout\n{\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    public AutoFrameLayout(Context context)\n    {\n        super(context);\n    }\n\n    public AutoFrameLayout(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n    }\n\n    public AutoFrameLayout(Context context, AttributeSet attrs, int defStyleAttr)\n    {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @TargetApi(Build.VERSION_CODES.LOLLIPOP)\n    public AutoFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n    }\n\n    @Override\n    public LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new LayoutParams(getContext(), attrs);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n        if (!isInEditMode())\n        {\n            mHelper.adjustChildren();\n        }\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n    @Override\n    protected void onLayout(boolean changed, int left, int top, int right, int bottom)\n    {\n        super.onLayout(changed, left, top, right, bottom);\n    }\n\n    public static class LayoutParams extends FrameLayout.LayoutParams\n            implements AutoLayoutHelper.AutoLayoutParams\n    {\n        private AutoLayoutInfo mAutoLayoutInfo;\n\n        public LayoutParams(Context c, AttributeSet attrs)\n        {\n            super(c, attrs);\n\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\n        }\n\n        public LayoutParams(int width, int height)\n        {\n            super(width, height);\n        }\n\n        public LayoutParams(int width, int height, int gravity)\n        {\n            super(width, height, gravity);\n        }\n\n        public LayoutParams(ViewGroup.LayoutParams source)\n        {\n            super(source);\n        }\n\n        public LayoutParams(MarginLayoutParams source)\n        {\n            super(source);\n        }\n\n        public LayoutParams(FrameLayout.LayoutParams source)\n        {\n            super((MarginLayoutParams) source);\n            gravity = source.gravity;\n        }\n\n        public LayoutParams(LayoutParams source)\n        {\n            this((FrameLayout.LayoutParams) source);\n            mAutoLayoutInfo = source.mAutoLayoutInfo;\n        }\n\n        @Override\n        public AutoLayoutInfo getAutoLayoutInfo()\n        {\n            return mAutoLayoutInfo;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/AutoLayoutActivity.java",
    "content": "package com.zhy.autolayout;\n\nimport android.content.Context;\nimport android.support.v7.app.AppCompatActivity;\nimport android.util.AttributeSet;\nimport android.view.View;\n\n;\n\n/**\n * Created by zhy on 15/11/19.\n */\npublic class AutoLayoutActivity extends AppCompatActivity\n{\n    private static final String LAYOUT_LINEARLAYOUT = \"LinearLayout\";\n    private static final String LAYOUT_FRAMELAYOUT = \"FrameLayout\";\n    private static final String LAYOUT_RELATIVELAYOUT = \"RelativeLayout\";\n\n\n    @Override\n    public View onCreateView(String name, Context context, AttributeSet attrs)\n    {\n        View view = null;\n        if (name.equals(LAYOUT_FRAMELAYOUT))\n        {\n            view = new AutoFrameLayout(context, attrs);\n        }\n\n        if (name.equals(LAYOUT_LINEARLAYOUT))\n        {\n            view = new AutoLinearLayout(context, attrs);\n        }\n\n        if (name.equals(LAYOUT_RELATIVELAYOUT))\n        {\n            view = new AutoRelativeLayout(context, attrs);\n        }\n\n        if (view != null) return view;\n\n        return super.onCreateView(name, context, attrs);\n    }\n\n\n\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java",
    "content": "package com.zhy.autolayout;\n\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport com.zhy.autolayout.attr.Attrs;\nimport com.zhy.autolayout.attr.AutoAttr;\nimport com.zhy.autolayout.attr.HeightAttr;\nimport com.zhy.autolayout.attr.MarginBottomAttr;\nimport com.zhy.autolayout.attr.MarginLeftAttr;\nimport com.zhy.autolayout.attr.MarginRightAttr;\nimport com.zhy.autolayout.attr.MarginTopAttr;\nimport com.zhy.autolayout.attr.MaxHeightAttr;\nimport com.zhy.autolayout.attr.MaxWidthAttr;\nimport com.zhy.autolayout.attr.MinHeightAttr;\nimport com.zhy.autolayout.attr.MinWidthAttr;\nimport com.zhy.autolayout.attr.PaddingBottomAttr;\nimport com.zhy.autolayout.attr.PaddingLeftAttr;\nimport com.zhy.autolayout.attr.PaddingRightAttr;\nimport com.zhy.autolayout.attr.PaddingTopAttr;\nimport com.zhy.autolayout.attr.TextSizeAttr;\nimport com.zhy.autolayout.attr.WidthAttr;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class AutoLayoutInfo\n{\n    private List<AutoAttr> autoAttrs = new ArrayList<>();\n\n    public void addAttr(AutoAttr autoAttr)\n    {\n        autoAttrs.add(autoAttr);\n    }\n\n\n    public void fillAttrs(View view)\n    {\n        for (AutoAttr autoAttr : autoAttrs)\n        {\n            autoAttr.apply(view);\n        }\n    }\n\n\n    public static AutoLayoutInfo getAttrFromView(View view, int attrs, int base)\n    {\n        ViewGroup.LayoutParams params = view.getLayoutParams();\n        if (params == null) return null;\n        AutoLayoutInfo autoLayoutInfo = new AutoLayoutInfo();\n\n        // width & height\n        if ((attrs & Attrs.WIDTH) != 0 && params.width > 0)\n        {\n            autoLayoutInfo.addAttr(WidthAttr.generate(params.width, base));\n        }\n\n        if ((attrs & Attrs.HEIGHT) != 0 && params.height > 0)\n        {\n            autoLayoutInfo.addAttr(HeightAttr.generate(params.height, base));\n        }\n\n        //margin\n        if (params instanceof ViewGroup.MarginLayoutParams)\n        {\n            if ((attrs & Attrs.MARGIN) != 0)\n            {\n                autoLayoutInfo.addAttr(MarginLeftAttr.generate(((ViewGroup.MarginLayoutParams) params).leftMargin, base));\n                autoLayoutInfo.addAttr(MarginTopAttr.generate(((ViewGroup.MarginLayoutParams) params).topMargin, base));\n                autoLayoutInfo.addAttr(MarginRightAttr.generate(((ViewGroup.MarginLayoutParams) params).rightMargin, base));\n                autoLayoutInfo.addAttr(MarginBottomAttr.generate(((ViewGroup.MarginLayoutParams) params).bottomMargin, base));\n            }\n            if ((attrs & Attrs.MARGIN_LEFT) != 0)\n            {\n                autoLayoutInfo.addAttr(MarginLeftAttr.generate(((ViewGroup.MarginLayoutParams) params).leftMargin, base));\n            }\n            if ((attrs & Attrs.MARGIN_TOP) != 0)\n            {\n                autoLayoutInfo.addAttr(MarginTopAttr.generate(((ViewGroup.MarginLayoutParams) params).topMargin, base));\n            }\n            if ((attrs & Attrs.MARGIN_RIGHT) != 0)\n            {\n                autoLayoutInfo.addAttr(MarginRightAttr.generate(((ViewGroup.MarginLayoutParams) params).rightMargin, base));\n            }\n            if ((attrs & Attrs.MARGIN_BOTTOM) != 0)\n            {\n                autoLayoutInfo.addAttr(MarginBottomAttr.generate(((ViewGroup.MarginLayoutParams) params).bottomMargin, base));\n            }\n        }\n\n        //padding\n        if ((attrs & Attrs.PADDING) != 0)\n        {\n            autoLayoutInfo.addAttr(PaddingLeftAttr.generate(view.getPaddingLeft(), base));\n            autoLayoutInfo.addAttr(PaddingTopAttr.generate(view.getPaddingTop(), base));\n            autoLayoutInfo.addAttr(PaddingRightAttr.generate(view.getPaddingRight(), base));\n            autoLayoutInfo.addAttr(PaddingBottomAttr.generate(view.getPaddingBottom(), base));\n        }\n        if ((attrs & Attrs.PADDING_LEFT) != 0)\n        {\n            autoLayoutInfo.addAttr(MarginLeftAttr.generate(view.getPaddingLeft(), base));\n        }\n        if ((attrs & Attrs.PADDING_TOP) != 0)\n        {\n            autoLayoutInfo.addAttr(MarginTopAttr.generate(view.getPaddingTop(), base));\n        }\n        if ((attrs & Attrs.PADDING_RIGHT) != 0)\n        {\n            autoLayoutInfo.addAttr(MarginRightAttr.generate(view.getPaddingRight(), base));\n        }\n        if ((attrs & Attrs.PADDING_BOTTOM) != 0)\n        {\n            autoLayoutInfo.addAttr(MarginBottomAttr.generate(view.getPaddingBottom(), base));\n        }\n\n        //minWidth ,maxWidth , minHeight , maxHeight\n        if ((attrs & Attrs.MIN_WIDTH) != 0)\n        {\n            autoLayoutInfo.addAttr(MinWidthAttr.generate(MinWidthAttr.getMinWidth(view), base));\n        }\n        if ((attrs & Attrs.MAX_WIDTH) != 0)\n        {\n            autoLayoutInfo.addAttr(MaxWidthAttr.generate(MaxWidthAttr.getMaxWidth(view), base));\n        }\n        if ((attrs & Attrs.MIN_HEIGHT) != 0)\n        {\n            autoLayoutInfo.addAttr(MinHeightAttr.generate(MinHeightAttr.getMinHeight(view), base));\n        }\n        if ((attrs & Attrs.MAX_HEIGHT) != 0)\n        {\n            autoLayoutInfo.addAttr(MaxHeightAttr.generate(MaxHeightAttr.getMaxHeight(view), base));\n        }\n\n        //textsize\n\n        if (view instanceof TextView)\n        {\n            if ((attrs & Attrs.TEXTSIZE) != 0)\n            {\n                autoLayoutInfo.addAttr(TextSizeAttr.generate((int) ((TextView) view).getTextSize(), base));\n            }\n        }\n        return autoLayoutInfo;\n    }\n\n\n    @Override\n    public String toString()\n    {\n        return \"AutoLayoutInfo{\" +\n                \"autoAttrs=\" + autoAttrs +\n                '}';\n    }\n}"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/AutoLinearLayout.java",
    "content": "package com.zhy.autolayout;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.os.Build;\nimport android.util.AttributeSet;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\n\n/**\n * Created by zhy on 15/6/30.\n */\npublic class AutoLinearLayout extends LinearLayout\n{\n\n    private AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    public AutoLinearLayout(Context context) {\n        super(context);\n    }\n\n    public AutoLinearLayout(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    @TargetApi(Build.VERSION_CODES.HONEYCOMB)\n    public AutoLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @TargetApi(Build.VERSION_CODES.LOLLIPOP)\n    public AutoLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n        if (!isInEditMode())\n            mHelper.adjustChildren();\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n\n    @Override\n    protected void onLayout(boolean changed, int l, int t, int r, int b)\n    {\n        super.onLayout(changed, l, t, r, b);\n    }\n\n\n    @Override\n    public LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new AutoLinearLayout.LayoutParams(getContext(), attrs);\n    }\n\n\n    public static class LayoutParams extends LinearLayout.LayoutParams\n            implements AutoLayoutHelper.AutoLayoutParams\n    {\n        private AutoLayoutInfo mAutoLayoutInfo;\n\n        public LayoutParams(Context c, AttributeSet attrs)\n        {\n            super(c, attrs);\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\n        }\n\n        @Override\n        public AutoLayoutInfo getAutoLayoutInfo()\n        {\n            return mAutoLayoutInfo;\n        }\n\n\n        public LayoutParams(int width, int height)\n        {\n            super(width, height);\n        }\n\n\n        public LayoutParams(ViewGroup.LayoutParams source)\n        {\n            super(source);\n        }\n\n        public LayoutParams(MarginLayoutParams source)\n        {\n            super(source);\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/AutoRelativeLayout.java",
    "content": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.zhy.autolayout;\n\nimport android.annotation.TargetApi;\nimport android.content.Context;\nimport android.os.Build;\nimport android.util.AttributeSet;\nimport android.view.ViewGroup;\nimport android.widget.RelativeLayout;\n\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\n\npublic class AutoRelativeLayout extends RelativeLayout\n{\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    public AutoRelativeLayout(Context context)\n    {\n        super(context);\n    }\n\n    public AutoRelativeLayout(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n    }\n\n    public AutoRelativeLayout(Context context, AttributeSet attrs, int defStyle)\n    {\n        super(context, attrs, defStyle);\n    }\n\n    @TargetApi(Build.VERSION_CODES.LOLLIPOP)\n    public AutoRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n    }\n\n    @Override\n    public LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new LayoutParams(getContext(), attrs);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n        if (!isInEditMode())\n            mHelper.adjustChildren();\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n    @Override\n    protected void onLayout(boolean changed, int left, int top, int right, int bottom)\n    {\n        super.onLayout(changed, left, top, right, bottom);\n    }\n\n\n    public static class LayoutParams extends RelativeLayout.LayoutParams\n            implements AutoLayoutHelper.AutoLayoutParams\n    {\n        private AutoLayoutInfo mAutoLayoutInfo;\n\n        public LayoutParams(Context c, AttributeSet attrs)\n        {\n            super(c, attrs);\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\n        }\n\n        public LayoutParams(int width, int height)\n        {\n            super(width, height);\n        }\n\n        public LayoutParams(ViewGroup.LayoutParams source)\n        {\n            super(source);\n        }\n\n        public LayoutParams(MarginLayoutParams source)\n        {\n            super(source);\n        }\n\n        @Override\n        public AutoLayoutInfo getAutoLayoutInfo()\n        {\n            return mAutoLayoutInfo;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/Attrs.java",
    "content": "package com.zhy.autolayout.attr;\n\n/**\n * Created by zhy on 15/12/5.\n * <p/>\n * 与attrs.xml中数值对应\n */\npublic interface Attrs\n{\n    public static final int WIDTH = 1;\n    public static final int HEIGHT = WIDTH << 1;\n    public static final int TEXTSIZE = HEIGHT << 1;\n    public static final int PADDING = TEXTSIZE << 1;\n    public static final int MARGIN = PADDING << 1;\n    public static final int MARGIN_LEFT = MARGIN << 1;\n    public static final int MARGIN_TOP = MARGIN_LEFT << 1;\n    public static final int MARGIN_RIGHT = MARGIN_TOP << 1;\n    public static final int MARGIN_BOTTOM = MARGIN_RIGHT << 1;\n    public static final int PADDING_LEFT = MARGIN_BOTTOM << 1;\n    public static final int PADDING_TOP = PADDING_LEFT << 1;\n    public static final int PADDING_RIGHT = PADDING_TOP << 1;\n    public static final int PADDING_BOTTOM = PADDING_RIGHT << 1;\n    public static final int MIN_WIDTH = PADDING_BOTTOM << 1;\n    public static final int MAX_WIDTH = MIN_WIDTH << 1;\n    public static final int MIN_HEIGHT = MAX_WIDTH << 1;\n    public static final int MAX_HEIGHT = MIN_HEIGHT << 1;\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/AutoAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\nimport com.zhy.autolayout.utils.AutoUtils;\nimport com.zhy.autolayout.utils.L;\n\n\n/**\n * Created by zhy on 15/12/4.\n */\npublic abstract class AutoAttr\n{\n    public static final int BASE_WIDTH = 1;\n    public static final int BASE_HEIGHT = 2;\n    public static final int BASE_DEFAULT = 3;\n\n    protected int pxVal;\n    protected int baseWidth;\n    protected int baseHeight;\n\n    /*\n    protected boolean isBaseWidth;\n    protected boolean isBaseDefault;\n\n    public AutoAttr(int pxVal)\n    {\n        this.pxVal = pxVal;\n        isBaseDefault = true;\n    }\n\n    public AutoAttr(int pxVal, boolean isBaseWidth)\n    {\n        this.pxVal = pxVal;\n        this.isBaseWidth = isBaseWidth;\n    }\n */\n\n    public AutoAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        this.pxVal = pxVal;\n        this.baseWidth = baseWidth;\n        this.baseHeight = baseHeight;\n    }\n\n    public void apply(View view)\n    {\n\n        boolean log = view.getTag() != null && view.getTag().toString().equals(\"auto\");\n\n        if (log)\n        {\n            L.e(\" pxVal = \" + pxVal + \" ,\" + this.getClass().getSimpleName());\n        }\n        int val;\n        if (useDefault())\n        {\n            val = defaultBaseWidth() ? getPercentWidthSize() : getPercentHeightSize();\n            if (log)\n            {\n                L.e(\" useDefault val= \" + val);\n            }\n        } else if (baseWidth())\n        {\n            val = getPercentWidthSize();\n            if (log)\n            {\n                L.e(\" baseWidth val= \" + val);\n            }\n        } else\n        {\n            val = getPercentHeightSize();\n            if (log)\n            {\n                L.e(\" baseHeight val= \" + val);\n            }\n        }\n\n        if (val > 0)\n            val = Math.max(val, 1);//for very thin divider\n        execute(view, val);\n    }\n\n    protected int getPercentWidthSize()\n    {\n        return AutoUtils.getPercentWidthSizeBigger(pxVal);\n    }\n\n    protected int getPercentHeightSize()\n    {\n        return AutoUtils.getPercentHeightSizeBigger(pxVal);\n    }\n\n\n    protected boolean baseWidth()\n    {\n        return contains(baseWidth, attrVal());\n    }\n\n    protected boolean useDefault()\n    {\n        return !contains(baseHeight, attrVal()) && !contains(baseWidth, attrVal());\n    }\n\n    protected boolean contains(int baseVal, int flag)\n    {\n        return (baseVal & flag) != 0;\n    }\n\n    protected abstract int attrVal();\n\n    protected abstract boolean defaultBaseWidth();\n\n    protected abstract void execute(View view, int val);\n\n\n    @Override\n    public String toString()\n    {\n        return \"AutoAttr{\" +\n                \"pxVal=\" + pxVal +\n                \", baseWidth=\" + baseWidth() +\n                \", defaultBaseWidth=\" + defaultBaseWidth() +\n                '}';\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/HeightAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class HeightAttr extends AutoAttr\n{\n    public HeightAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.HEIGHT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        ViewGroup.LayoutParams lp = view.getLayoutParams();\n        lp.height = val;\n    }\n\n    public static HeightAttr generate(int val, int baseFlag)\n    {\n        HeightAttr heightAttr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                heightAttr = new HeightAttr(val, Attrs.HEIGHT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                heightAttr = new HeightAttr(val, 0, Attrs.HEIGHT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                heightAttr = new HeightAttr(val, 0, 0);\n                break;\n        }\n        return heightAttr;\n    }\n\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MarginAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class MarginAttr extends AutoAttr\n{\n    public MarginAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MARGIN;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    public void apply(View view)\n    {\n        if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))\n        {\n            return;\n        }\n        if (useDefault())\n        {\n            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n            lp.leftMargin = lp.rightMargin = getPercentWidthSize();\n            lp.topMargin = lp.bottomMargin = getPercentHeightSize();\n            return;\n        }\n        super.apply(view);\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n        lp.leftMargin = lp.rightMargin = lp.topMargin = lp.bottomMargin = val;\n    }\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MarginBottomAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class MarginBottomAttr extends AutoAttr\n{\n    public MarginBottomAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MARGIN_BOTTOM;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        if(!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))\n        {\n            return ;\n        }\n        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n        lp.bottomMargin = val;\n    }\n\n    public static MarginBottomAttr generate(int val, int baseFlag)\n    {\n        MarginBottomAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MarginBottomAttr(val, Attrs.MARGIN_BOTTOM, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MarginBottomAttr(val, 0, Attrs.MARGIN_BOTTOM);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MarginBottomAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MarginLeftAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class MarginLeftAttr extends AutoAttr\n{\n    public MarginLeftAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MARGIN_LEFT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))\n        {\n            return;\n        }\n        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n        lp.leftMargin = val;\n    }\n\n    public static MarginLeftAttr generate(int val, int baseFlag)\n    {\n        MarginLeftAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MarginLeftAttr(val, Attrs.MARGIN_LEFT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MarginLeftAttr(val, 0, Attrs.MARGIN_LEFT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MarginLeftAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MarginRightAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class MarginRightAttr extends AutoAttr\n{\n    public MarginRightAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MARGIN_RIGHT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))\n        {\n            return;\n        }\n        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n        lp.rightMargin = val;\n    }\n\n\n    public static MarginRightAttr generate(int val, int baseFlag)\n    {\n        MarginRightAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MarginRightAttr(val, Attrs.MARGIN_RIGHT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MarginRightAttr(val, 0, Attrs.MARGIN_RIGHT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MarginRightAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class MarginTopAttr extends AutoAttr\n{\n    public MarginTopAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MARGIN_TOP;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))\n        {\n            return;\n        }\n        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();\n        lp.topMargin = val;\n\n    }\n\n\n    public static MarginTopAttr generate(int val, int baseFlag)\n    {\n        MarginTopAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MarginTopAttr(val, Attrs.MARGIN_TOP, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MarginTopAttr(val, 0, Attrs.MARGIN_TOP);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MarginTopAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MaxHeightAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\nimport java.lang.reflect.Method;\n\n/**\n * Created by zhy on 15/12/24.\n */\npublic class MaxHeightAttr extends AutoAttr\n{\n    public MaxHeightAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MAX_HEIGHT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        try\n        {\n            Method setMaxWidthMethod = view.getClass().getMethod(\"setMaxHeight\", int.class);\n            setMaxWidthMethod.invoke(view, val);\n        } catch (Exception ignore)\n        {\n        }\n    }\n\n    public static MaxHeightAttr generate(int val, int baseFlag)\n    {\n        MaxHeightAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MaxHeightAttr(val, Attrs.MAX_HEIGHT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MaxHeightAttr(val, 0, Attrs.MAX_HEIGHT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MaxHeightAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n\n    public static int getMaxHeight(View view)\n    {\n        try\n        {\n            Method setMaxWidthMethod = view.getClass().getMethod(\"getMaxHeight\");\n            return (int) setMaxWidthMethod.invoke(view);\n        } catch (Exception ignore)\n        {\n        }\n        return 0;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MaxWidthAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\nimport java.lang.reflect.Method;\n\n/**\n * Created by zhy on 15/12/24.\n */\npublic class MaxWidthAttr extends AutoAttr\n{\n    public MaxWidthAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MAX_WIDTH;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        try\n        {\n            Method setMaxWidthMethod = view.getClass().getMethod(\"setMaxWidth\", int.class);\n            setMaxWidthMethod.invoke(view, val);\n        } catch (Exception ignore)\n        {\n        }\n    }\n\n    public static MaxWidthAttr generate(int val, int baseFlag)\n    {\n        MaxWidthAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MaxWidthAttr(val, Attrs.MAX_WIDTH, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MaxWidthAttr(val, 0, Attrs.MAX_WIDTH);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MaxWidthAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n\n    public static int getMaxWidth(View view)\n    {\n        try\n        {\n            Method setMaxWidthMethod = view.getClass().getMethod(\"getMaxWidth\");\n            return (int) setMaxWidthMethod.invoke(view);\n        } catch (Exception ignore)\n        {\n        }\n        return 0;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MinHeightAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.os.Build;\nimport android.view.View;\n\nimport java.lang.reflect.Field;\n\n/**\n * Created by zhy on 15/12/24.\n */\npublic class MinHeightAttr extends AutoAttr\n{\n    public MinHeightAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MIN_HEIGHT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        try\n        {\n            view.setMinimumHeight(val);\n//            Method setMaxWidthMethod = view.getClass().getMethod(\"setMinHeight\", int.class);\n//            setMaxWidthMethod.invoke(view, val);\n        } catch (Exception ignore)\n        {\n        }\n    }\n\n    public static MinHeightAttr generate(int val, int baseFlag)\n    {\n        MinHeightAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MinHeightAttr(val, Attrs.MIN_HEIGHT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MinHeightAttr(val, 0, Attrs.MIN_HEIGHT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MinHeightAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n\n    public static int getMinHeight(View view)\n    {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)\n        {\n            return view.getMinimumHeight();\n        } else\n        {\n            try\n            {\n                Field minHeight = view.getClass().getField(\"mMinHeight\");\n                minHeight.setAccessible(true);\n                return (int) minHeight.get(view);\n            } catch (Exception e)\n            {\n            }\n        }\n\n        return 0;\n    }\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/MinWidthAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.os.Build;\nimport android.view.View;\n\nimport java.lang.reflect.Field;\n\n/**\n * Created by zhy on 15/12/24.\n */\npublic class MinWidthAttr extends AutoAttr\n{\n    public MinWidthAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.MIN_WIDTH;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        try\n        {\n//            Method setMaxWidthMethod = view.getClass().getMethod(\"setMinWidth\", int.class);\n//            setMaxWidthMethod.invoke(view, val);\n        } catch (Exception ignore)\n        {\n        }\n\n        view.setMinimumWidth(val);\n    }\n\n    public static int getMinWidth(View view)\n    {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)\n            return view.getMinimumWidth();\n        try\n        {\n            Field minWidth = view.getClass().getField(\"mMinWidth\");\n            minWidth.setAccessible(true);\n            return (int) minWidth.get(view);\n        } catch (Exception ignore)\n        {\n        }\n        return 0;\n    }\n\n\n    public static MinWidthAttr generate(int val, int baseFlag)\n    {\n        MinWidthAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new MinWidthAttr(val, Attrs.MIN_WIDTH, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new MinWidthAttr(val, 0, Attrs.MIN_WIDTH);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new MinWidthAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/PaddingAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class PaddingAttr extends AutoAttr\n{\n    public PaddingAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.PADDING;\n    }\n\n    @Override\n    public void apply(View view)\n    {\n        int l, t, r, b;\n        if (useDefault())\n        {\n            l = r = getPercentWidthSize();\n            t = b = getPercentHeightSize();\n            view.setPadding(l, t, r, b);\n            return;\n        }\n        super.apply(view);\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        view.setPadding(val, val, val, val);\n    }\n\n\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/PaddingBottomAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class PaddingBottomAttr extends AutoAttr\n{\n    public PaddingBottomAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.PADDING_BOTTOM;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        int l = view.getPaddingLeft();\n        int t = view.getPaddingTop();\n        int r = view.getPaddingRight();\n        int b = val;\n        view.setPadding(l, t, r, b);\n\n    }\n\n\n    public static PaddingBottomAttr generate(int val, int baseFlag)\n    {\n        PaddingBottomAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new PaddingBottomAttr(val, Attrs.PADDING_BOTTOM, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new PaddingBottomAttr(val, 0, Attrs.PADDING_BOTTOM);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new PaddingBottomAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/PaddingLeftAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class PaddingLeftAttr extends AutoAttr\n{\n    public PaddingLeftAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.PADDING_LEFT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        int l = val;\n        int t = view.getPaddingTop();\n        int r = view.getPaddingRight();\n        int b = view.getPaddingBottom();\n        view.setPadding(l, t, r, b);\n\n    }\n\n\n    public static PaddingLeftAttr generate(int val, int baseFlag)\n    {\n        PaddingLeftAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new PaddingLeftAttr(val, Attrs.PADDING_LEFT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new PaddingLeftAttr(val, 0, Attrs.PADDING_LEFT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new PaddingLeftAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/PaddingRightAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class PaddingRightAttr extends AutoAttr\n{\n    public PaddingRightAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.PADDING_RIGHT;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        int l = view.getPaddingLeft();\n        int t = view.getPaddingTop();\n        int r = val;\n        int b = view.getPaddingBottom();\n        view.setPadding(l, t, r, b);\n\n    }\n\n\n    public static PaddingRightAttr generate(int val, int baseFlag)\n    {\n        PaddingRightAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new PaddingRightAttr(val, Attrs.PADDING_RIGHT, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new PaddingRightAttr(val, 0, Attrs.PADDING_RIGHT);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new PaddingRightAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/PaddingTopAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class PaddingTopAttr extends AutoAttr\n{\n    public PaddingTopAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.PADDING_TOP;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        int l = view.getPaddingLeft();\n        int t = val;\n        int r = view.getPaddingRight();\n        int b = view.getPaddingBottom();\n        view.setPadding(l, t, r, b);\n    }\n\n    public static PaddingTopAttr generate(int val, int baseFlag)\n    {\n        PaddingTopAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new PaddingTopAttr(val, Attrs.PADDING_TOP, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new PaddingTopAttr(val, 0, Attrs.PADDING_TOP);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new PaddingTopAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/TextSizeAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.util.TypedValue;\nimport android.view.View;\nimport android.widget.TextView;\n\n/**\n * Created by zhy on 15/12/4.\n */\npublic class TextSizeAttr extends AutoAttr\n{\n\n    public TextSizeAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.TEXTSIZE;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return false;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        if (!(view instanceof TextView))\n            return;\n        ((TextView) view).setIncludeFontPadding(false);\n        ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, val);\n    }\n\n    public static TextSizeAttr generate(int val, int baseFlag)\n    {\n        TextSizeAttr attr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                attr = new TextSizeAttr(val, Attrs.TEXTSIZE, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                attr = new TextSizeAttr(val, 0, Attrs.TEXTSIZE);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                attr = new TextSizeAttr(val, 0, 0);\n                break;\n        }\n        return attr;\n    }\n\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/attr/WidthAttr.java",
    "content": "package com.zhy.autolayout.attr;\n\nimport android.view.View;\nimport android.view.ViewGroup;\n\n/**\n * Created by zhy on 15/12/5.\n */\npublic class WidthAttr extends AutoAttr\n{\n    public WidthAttr(int pxVal, int baseWidth, int baseHeight)\n    {\n        super(pxVal, baseWidth, baseHeight);\n    }\n\n    @Override\n    protected int attrVal()\n    {\n        return Attrs.WIDTH;\n    }\n\n    @Override\n    protected boolean defaultBaseWidth()\n    {\n        return true;\n    }\n\n    @Override\n    protected void execute(View view, int val)\n    {\n        ViewGroup.LayoutParams lp = view.getLayoutParams();\n        lp.width = val;\n    }\n\n    public static WidthAttr generate(int val, int baseFlag)\n    {\n        WidthAttr widthAttr = null;\n        switch (baseFlag)\n        {\n            case AutoAttr.BASE_WIDTH:\n                widthAttr = new WidthAttr(val, Attrs.WIDTH, 0);\n                break;\n            case AutoAttr.BASE_HEIGHT:\n                widthAttr = new WidthAttr(val, 0, Attrs.WIDTH);\n                break;\n            case AutoAttr.BASE_DEFAULT:\n                widthAttr = new WidthAttr(val, 0, 0);\n                break;\n        }\n        return widthAttr;\n    }\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/config/AutoLayoutConifg.java",
    "content": "package com.zhy.autolayout.config;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\n\nimport com.zhy.autolayout.utils.L;\nimport com.zhy.autolayout.utils.ScreenUtils;\n\n/**\n * Created by zhy on 15/11/18.\n */\npublic class AutoLayoutConifg\n{\n\n    private static AutoLayoutConifg sIntance = new AutoLayoutConifg();\n\n\n    private static final String KEY_DESIGN_WIDTH = \"design_width\";\n    private static final String KEY_DESIGN_HEIGHT = \"design_height\";\n\n    private int mScreenWidth;\n    private int mScreenHeight;\n\n    private int mDesignWidth;\n    private int mDesignHeight;\n\n    private boolean useDeviceSize;\n\n\n    private AutoLayoutConifg()\n    {\n    }\n\n    public void checkParams()\n    {\n        if (mDesignHeight <= 0 || mDesignWidth <= 0)\n        {\n            throw new RuntimeException(\n                    \"you must set \" + KEY_DESIGN_WIDTH + \" and \" + KEY_DESIGN_HEIGHT + \"  in your manifest file.\");\n        }\n    }\n\n    public AutoLayoutConifg useDeviceSize()\n    {\n        useDeviceSize = true;\n        return this;\n    }\n\n\n    public static AutoLayoutConifg getInstance()\n    {\n        return sIntance;\n    }\n\n\n    public int getScreenWidth()\n    {\n        return mScreenWidth;\n    }\n\n    public int getScreenHeight()\n    {\n        return mScreenHeight;\n    }\n\n    public int getDesignWidth()\n    {\n        return mDesignWidth;\n    }\n\n    public int getDesignHeight()\n    {\n        return mDesignHeight;\n    }\n\n\n    public void init(Context context)\n    {\n        getMetaData(context);\n\n        int[] screenSize = ScreenUtils.getScreenSize(context, useDeviceSize);\n        mScreenWidth = screenSize[0];\n        mScreenHeight = screenSize[1];\n        L.e(\" screenWidth =\" + mScreenWidth + \" ,screenHeight = \" + mScreenHeight);\n    }\n\n    private void getMetaData(Context context)\n    {\n        PackageManager packageManager = context.getPackageManager();\n        ApplicationInfo applicationInfo;\n        try\n        {\n            applicationInfo = packageManager.getApplicationInfo(context\n                    .getPackageName(), PackageManager.GET_META_DATA);\n            if (applicationInfo != null && applicationInfo.metaData != null)\n            {\n                mDesignWidth = (int) applicationInfo.metaData.get(KEY_DESIGN_WIDTH);\n                mDesignHeight = (int) applicationInfo.metaData.get(KEY_DESIGN_HEIGHT);\n            }\n        } catch (PackageManager.NameNotFoundException e)\n        {\n            throw new RuntimeException(\n                    \"you must set \" + KEY_DESIGN_WIDTH + \" and \" + KEY_DESIGN_HEIGHT + \"  in your manifest file.\", e);\n        }\n\n        L.e(\" designWidth =\" + mDesignWidth + \" , designHeight = \" + mDesignHeight);\n    }\n\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/config/UseLandscape.java",
    "content": "package com.zhy.autolayout.config;\n\n/**\n * Created by zhy on 15/12/5.\n * 如果Activity设计稿是横屏，继承该接口即可\n */\npublic interface UseLandscape\n{\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/utils/AutoLayoutHelper.java",
    "content": "/*\n * Copyright (C) 2015 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.zhy.autolayout.utils;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.zhy.autolayout.AutoLayoutInfo;\nimport com.zhy.autolayout.R;\nimport com.zhy.autolayout.attr.HeightAttr;\nimport com.zhy.autolayout.attr.MarginAttr;\nimport com.zhy.autolayout.attr.MarginBottomAttr;\nimport com.zhy.autolayout.attr.MarginLeftAttr;\nimport com.zhy.autolayout.attr.MarginRightAttr;\nimport com.zhy.autolayout.attr.MarginTopAttr;\nimport com.zhy.autolayout.attr.MaxHeightAttr;\nimport com.zhy.autolayout.attr.MaxWidthAttr;\nimport com.zhy.autolayout.attr.MinHeightAttr;\nimport com.zhy.autolayout.attr.MinWidthAttr;\nimport com.zhy.autolayout.attr.PaddingAttr;\nimport com.zhy.autolayout.attr.PaddingBottomAttr;\nimport com.zhy.autolayout.attr.PaddingLeftAttr;\nimport com.zhy.autolayout.attr.PaddingRightAttr;\nimport com.zhy.autolayout.attr.PaddingTopAttr;\nimport com.zhy.autolayout.attr.TextSizeAttr;\nimport com.zhy.autolayout.attr.WidthAttr;\nimport com.zhy.autolayout.config.AutoLayoutConifg;\n\npublic class AutoLayoutHelper\n{\n    private final ViewGroup mHost;\n\n    private static final int[] LL = new int[]\n            { //\n                    android.R.attr.textSize,\n                    android.R.attr.padding,//\n                    android.R.attr.paddingLeft,//\n                    android.R.attr.paddingTop,//\n                    android.R.attr.paddingRight,//\n                    android.R.attr.paddingBottom,//\n                    android.R.attr.layout_width,//\n                    android.R.attr.layout_height,//\n                    android.R.attr.layout_margin,//\n                    android.R.attr.layout_marginLeft,//\n                    android.R.attr.layout_marginTop,//\n                    android.R.attr.layout_marginRight,//\n                    android.R.attr.layout_marginBottom,//\n                    android.R.attr.maxWidth,//\n                    android.R.attr.maxHeight,//\n                    android.R.attr.minWidth,//\n                    android.R.attr.minHeight,//16843072\n\n\n            };\n\n    private static final int INDEX_TEXT_SIZE = 0;\n    private static final int INDEX_PADDING = 1;\n    private static final int INDEX_PADDING_LEFT = 2;\n    private static final int INDEX_PADDING_TOP = 3;\n    private static final int INDEX_PADDING_RIGHT = 4;\n    private static final int INDEX_PADDING_BOTTOM = 5;\n    private static final int INDEX_WIDTH = 6;\n    private static final int INDEX_HEIGHT = 7;\n    private static final int INDEX_MARGIN = 8;\n    private static final int INDEX_MARGIN_LEFT = 9;\n    private static final int INDEX_MARGIN_TOP = 10;\n    private static final int INDEX_MARGIN_RIGHT = 11;\n    private static final int INDEX_MARGIN_BOTTOM = 12;\n    private static final int INDEX_MAX_WIDTH = 13;\n    private static final int INDEX_MAX_HEIGHT = 14;\n    private static final int INDEX_MIN_WIDTH = 15;\n    private static final int INDEX_MIN_HEIGHT = 16;\n\n\n    /**\n     * move to other place?\n     */\n    private static AutoLayoutConifg mAutoLayoutConifg;\n\n    public AutoLayoutHelper(ViewGroup host)\n    {\n        mHost = host;\n\n        if (mAutoLayoutConifg == null)\n        {\n            initAutoLayoutConfig(host);\n        }\n\n    }\n\n    private void initAutoLayoutConfig(ViewGroup host)\n    {\n        mAutoLayoutConifg = AutoLayoutConifg.getInstance();\n        mAutoLayoutConifg.init(host.getContext());\n    }\n\n\n    public void adjustChildren()\n    {\n        AutoLayoutConifg.getInstance().checkParams();\n\n        for (int i = 0, n = mHost.getChildCount(); i < n; i++)\n        {\n            View view = mHost.getChildAt(i);\n            ViewGroup.LayoutParams params = view.getLayoutParams();\n\n            if (params instanceof AutoLayoutParams)\n            {\n                AutoLayoutInfo info =\n                        ((AutoLayoutParams) params).getAutoLayoutInfo();\n                if (info != null)\n                {\n                    info.fillAttrs(view);\n                }\n            }\n        }\n\n    }\n\n    public static AutoLayoutInfo getAutoLayoutInfo(Context context,\n                                                   AttributeSet attrs)\n    {\n\n        AutoLayoutInfo info = new AutoLayoutInfo();\n\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoLayout_Layout);\n        int baseWidth = a.getInt(R.styleable.AutoLayout_Layout_layout_auto_basewidth, 0);\n        int baseHeight = a.getInt(R.styleable.AutoLayout_Layout_layout_auto_baseheight, 0);\n        a.recycle();\n\n        TypedArray array = context.obtainStyledAttributes(attrs, LL);\n\n        int n = array.getIndexCount();\n\n\n        for (int i = 0; i < n; i++)\n        {\n            int index = array.getIndex(i);\n//            String val = array.getString(index);\n//            if (!isPxVal(val)) continue;\n\n            if (!DimenUtils.isPxVal(array.peekValue(index))) continue;\n\n            int pxVal = 0;\n            try\n            {\n                pxVal = array.getDimensionPixelOffset(index, 0);\n            } catch (Exception ignore)//not dimension\n            {\n                continue;\n            }\n            switch (index)\n            {\n                case INDEX_TEXT_SIZE:\n                    info.addAttr(new TextSizeAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_PADDING:\n                    info.addAttr(new PaddingAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_PADDING_LEFT:\n                    info.addAttr(new PaddingLeftAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_PADDING_TOP:\n                    info.addAttr(new PaddingTopAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_PADDING_RIGHT:\n                    info.addAttr(new PaddingRightAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_PADDING_BOTTOM:\n                    info.addAttr(new PaddingBottomAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_WIDTH:\n                    info.addAttr(new WidthAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_HEIGHT:\n                    info.addAttr(new HeightAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MARGIN:\n                    info.addAttr(new MarginAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MARGIN_LEFT:\n                    info.addAttr(new MarginLeftAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MARGIN_TOP:\n                    info.addAttr(new MarginTopAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MARGIN_RIGHT:\n                    info.addAttr(new MarginRightAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MARGIN_BOTTOM:\n                    info.addAttr(new MarginBottomAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MAX_WIDTH:\n                    info.addAttr(new MaxWidthAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MAX_HEIGHT:\n                    info.addAttr(new MaxHeightAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MIN_WIDTH:\n                    info.addAttr(new MinWidthAttr(pxVal, baseWidth, baseHeight));\n                    break;\n                case INDEX_MIN_HEIGHT:\n                    info.addAttr(new MinHeightAttr(pxVal, baseWidth, baseHeight));\n                    break;\n            }\n        }\n        array.recycle();\n        L.e(\" getAutoLayoutInfo \" + info.toString());\n        return info;\n    }\n\n    public interface AutoLayoutParams\n    {\n        AutoLayoutInfo getAutoLayoutInfo();\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java",
    "content": "package com.zhy.autolayout.utils;\n\nimport android.view.View;\n\nimport com.zhy.autolayout.AutoLayoutInfo;\nimport com.zhy.autolayout.R;\nimport com.zhy.autolayout.attr.Attrs;\nimport com.zhy.autolayout.attr.AutoAttr;\nimport com.zhy.autolayout.config.AutoLayoutConifg;\n\n/**\n * Created by zhy on 15/12/4.\n */\npublic class AutoUtils\n{\n\n    /**\n     * 会直接将view的LayoutParams上设置的width，height直接进行百分比处理\n     *\n     * @param view\n     */\n    public static void auto(View view)\n    {\n        autoSize(view);\n        autoPadding(view);\n        autoMargin(view);\n        autoTextSize(view, AutoAttr.BASE_DEFAULT);\n    }\n\n    /**\n     * @param view\n     * @param attrs #Attrs.WIDTH|Attrs.HEIGHT\n     * @param base  AutoAttr.BASE_WIDTH|AutoAttr.BASE_HEIGHT|AutoAttr.BASE_DEFAULT\n     */\n    public static void auto(View view, int attrs, int base)\n    {\n        AutoLayoutInfo autoLayoutInfo = AutoLayoutInfo.getAttrFromView(view, attrs, base);\n        if (autoLayoutInfo != null)\n            autoLayoutInfo.fillAttrs(view);\n    }\n\n    public static void autoTextSize(View view)\n    {\n        auto(view, Attrs.TEXTSIZE, AutoAttr.BASE_DEFAULT);\n    }\n\n    public static void autoTextSize(View view, int base)\n    {\n        auto(view, Attrs.TEXTSIZE, base);\n    }\n\n    public static void autoMargin(View view)\n    {\n        auto(view, Attrs.MARGIN, AutoAttr.BASE_DEFAULT);\n    }\n\n    public static void autoMargin(View view, int base)\n    {\n        auto(view, Attrs.MARGIN, base);\n    }\n\n    public static void autoPadding(View view)\n    {\n        auto(view, Attrs.PADDING, AutoAttr.BASE_DEFAULT);\n    }\n\n    public static void autoPadding(View view, int base)\n    {\n        auto(view, Attrs.PADDING, base);\n    }\n\n    public static void autoSize(View view)\n    {\n        auto(view, Attrs.WIDTH | Attrs.HEIGHT, AutoAttr.BASE_DEFAULT);\n    }\n\n    public static void autoSize(View view, int base)\n    {\n        auto(view, Attrs.WIDTH | Attrs.HEIGHT, base);\n    }\n\n    public static boolean autoed(View view)\n    {\n        Object tag = view.getTag(R.id.id_tag_autolayout_size);\n        if (tag != null) return true;\n        view.setTag(R.id.id_tag_autolayout_size, \"Just Identify\");\n        return false;\n    }\n\n    public static float getPercentWidth1px()\n    {\n        int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth();\n        int designWidth = AutoLayoutConifg.getInstance().getDesignWidth();\n        return 1.0f * screenWidth / designWidth;\n    }\n\n    public static float getPercentHeight1px()\n    {\n        int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight();\n        int designHeight = AutoLayoutConifg.getInstance().getDesignHeight();\n        return 1.0f * screenHeight / designHeight;\n    }\n\n\n    public static int getPercentWidthSize(int val)\n    {\n        int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth();\n        int designWidth = AutoLayoutConifg.getInstance().getDesignWidth();\n        return (int) (val * 1.0f / designWidth * screenWidth);\n    }\n\n\n    public static int getPercentWidthSizeBigger(int val)\n    {\n        int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth();\n        int designWidth = AutoLayoutConifg.getInstance().getDesignWidth();\n\n        int res = val * screenWidth;\n        if (res % designWidth == 0)\n        {\n            return res / designWidth;\n        } else\n        {\n            return res / designWidth + 1;\n        }\n\n    }\n\n    public static int getPercentHeightSizeBigger(int val)\n    {\n        int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight();\n        int designHeight = AutoLayoutConifg.getInstance().getDesignHeight();\n\n        int res = val * screenHeight;\n        if (res % designHeight == 0)\n        {\n            return res / designHeight;\n        } else\n        {\n            return res / designHeight + 1;\n        }\n    }\n\n    public static int getPercentHeightSize(int val)\n    {\n        int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight();\n        int designHeight = AutoLayoutConifg.getInstance().getDesignHeight();\n\n        return (int) (val * 1.0f / designHeight * screenHeight);\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/utils/DimenUtils.java",
    "content": "package com.zhy.autolayout.utils;\n\nimport android.util.TypedValue;\n\n/**\n * Created by zhy on 16/3/3.\n */\npublic class DimenUtils\n{\n    private static int getComplexUnit(int data)\n    {\n        return TypedValue.COMPLEX_UNIT_MASK & (data >> TypedValue.COMPLEX_UNIT_SHIFT);\n    }\n\n    public static boolean isPxVal(TypedValue val)\n    {\n        if (val != null && val.type == TypedValue.TYPE_DIMENSION &&\n                getComplexUnit(val.data) == TypedValue.COMPLEX_UNIT_PX)\n        {\n            return true;\n        }\n        return false;\n    }\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/utils/L.java",
    "content": "package com.zhy.autolayout.utils;\n\nimport android.util.Log;\n\n/**\n * Created by zhy on 15/11/18.\n */\npublic class L\n{\n    public static boolean debug = false;\n    private static final String TAG = \"AUTO_LAYOUT\";\n\n    public static void e(String msg)\n    {\n        if (debug)\n        {\n            Log.e(TAG, msg);\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/utils/ScreenUtils.java",
    "content": "package com.zhy.autolayout.utils;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.graphics.Point;\nimport android.os.Build;\nimport android.util.DisplayMetrics;\nimport android.view.Display;\nimport android.view.WindowManager;\n\n/**\n * Created by zhy on 15/12/4.<br/>\n * form http://stackoverflow.com/questions/1016896/get-screen-dimensions-in-pixels/15699681#15699681\n */\npublic class ScreenUtils\n{\n\n    public static int getStatusBarHeight(Context context)\n    {\n        int result = 0;\n        try\n        {\n            int resourceId = context.getResources().getIdentifier(\"status_bar_height\", \"dimen\", \"android\");\n            if (resourceId > 0)\n            {\n                result = context.getResources().getDimensionPixelSize(resourceId);\n            }\n        } catch (Resources.NotFoundException e)\n        {\n            e.printStackTrace();\n        }\n        return result;\n    }\n\n\n    public static int[] getScreenSize(Context context, boolean useDeviceSize)\n    {\n\n        int[] size = new int[2];\n\n        WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);\n        Display d = w.getDefaultDisplay();\n        DisplayMetrics metrics = new DisplayMetrics();\n        d.getMetrics(metrics);\n// since SDK_INT = 1;\n        int widthPixels = metrics.widthPixels;\n        int heightPixels = metrics.heightPixels;\n\n        if (!useDeviceSize)\n        {\n            size[0] = widthPixels;\n            size[1] = heightPixels - getStatusBarHeight(context);\n\n            return size;\n        }\n\n// includes window decorations (statusbar bar/menu bar)\n        if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)\n            try\n            {\n                widthPixels = (Integer) Display.class.getMethod(\"getRawWidth\").invoke(d);\n                heightPixels = (Integer) Display.class.getMethod(\"getRawHeight\").invoke(d);\n            } catch (Exception ignored)\n            {\n            }\n// includes window decorations (statusbar bar/menu bar)\n        if (Build.VERSION.SDK_INT >= 17)\n            try\n            {\n                Point realSize = new Point();\n                Display.class.getMethod(\"getRealSize\", Point.class).invoke(d, realSize);\n                widthPixels = realSize.x;\n                heightPixels = realSize.y;\n            } catch (Exception ignored)\n            {\n            }\n        size[0] = widthPixels;\n        size[1] = heightPixels;\n        return size;\n    }\n\n}\n"
  },
  {
    "path": "autolayout/src/main/java/com/zhy/autolayout/widget/MetroLayout.java",
    "content": "package com.zhy.autolayout.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Color;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.zhy.autolayout.AutoLayoutInfo;\nimport com.zhy.autolayout.R;\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\nimport com.zhy.autolayout.utils.AutoUtils;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Random;\n\n/**\n * Created by zhy on 15/12/10.\n *\n * //do not use\n */\npublic class MetroLayout extends ViewGroup\n{\n\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    private static class MetroBlock\n    {\n        int left;\n        int top;\n        int width;\n    }\n\n    private List<MetroBlock> mAvailablePos = new ArrayList<>();\n    private int mDivider;\n\n    public MetroLayout(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MetroLayout);\n        mDivider = a.getDimensionPixelOffset(R.styleable.MetroLayout_metro_divider, 0);\n        mDivider = AutoUtils.getPercentWidthSizeBigger(mDivider);\n        a.recycle();\n\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n\n        if (true)\n            randomColor();\n\n        if (!isInEditMode())\n            mHelper.adjustChildren();\n\n        measureChildren(widthMeasureSpec, heightMeasureSpec);\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n\n    }\n\n    private void randomColor()\n    {\n        Random r = new Random(255);\n\n        for (int i = 0, n = getChildCount(); i < n; i++)\n        {\n            View v = getChildAt(i);\n\n            v.setBackgroundColor(Color.argb(100, r.nextInt(), r.nextInt(), r.nextInt()));\n        }\n    }\n\n\n    @Override\n    protected void onLayout(boolean changed, int l, int t, int r, int b)\n    {\n\n        initAvailablePosition();\n\n        int left = 0;\n        int top = 0;\n        int divider = mDivider;\n\n        for (int i = 0, n = getChildCount(); i < n; i++)\n        {\n            View v = getChildAt(i);\n            if (v.getVisibility() == View.GONE) continue;\n\n            MetroBlock newPos = findAvailablePos(v);\n            left = newPos.left;\n            top = newPos.top;\n\n            int childWidth = v.getMeasuredWidth();\n            int childHeight = v.getMeasuredHeight();\n\n            int right = left + childWidth;\n            int bottom = top + childHeight;\n\n            v.layout(left, top, right, bottom);\n\n            if (childWidth + divider < newPos.width)\n            {\n                newPos.left += childWidth + divider;\n                newPos.width -= childWidth + divider;\n            } else\n            {\n                mAvailablePos.remove(newPos);\n            }\n\n            MetroBlock p = new MetroBlock();\n            p.left = left;\n            p.top = bottom + divider;\n            p.width = childWidth;\n            mAvailablePos.add(p);\n\n            mergeAvailablePosition();\n\n        }\n    }\n\n    private void mergeAvailablePosition()\n    {\n        if (mAvailablePos.size() <= 1) return;\n\n        List<MetroBlock> needRemoveBlocks = new ArrayList<>();\n\n        MetroBlock one = mAvailablePos.get(0);\n        MetroBlock two = mAvailablePos.get(1);\n\n        for (int i = 1, n = mAvailablePos.size(); i < n - 1; i++)\n        {\n            if (one.top == two.top)\n            {\n                one.width = one.width + two.width;\n                needRemoveBlocks.add(one);\n                two.left = one.left;\n                two = mAvailablePos.get(i + 1);\n            } else\n            {\n                one = mAvailablePos.get(i);\n                two = mAvailablePos.get(i + 1);\n            }\n        }\n\n        mAvailablePos.removeAll(needRemoveBlocks);\n\n    }\n\n    private void initAvailablePosition()\n    {\n        mAvailablePos.clear();\n        MetroBlock first = new MetroBlock();\n        first.left = getPaddingLeft();\n        first.top = getPaddingTop();\n        first.width = getMeasuredWidth();\n        mAvailablePos.add(first);\n    }\n\n    private MetroBlock findAvailablePos(View view)\n    {\n        MetroBlock p = new MetroBlock();\n        if (mAvailablePos.size() == 0)\n        {\n            p.left = getPaddingLeft();\n            p.top = getPaddingTop();\n            p.width = getMeasuredWidth();\n            return p;\n        }\n        int min = mAvailablePos.get(0).top;\n        MetroBlock minHeightPos = mAvailablePos.get(0);\n        for (MetroBlock _p : mAvailablePos)\n        {\n            if (_p.top < min)\n            {\n                min = _p.top;\n                minHeightPos = _p;\n            }\n        }\n        return minHeightPos;\n    }\n\n\n    @Override\n    public MetroLayout.LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new LayoutParams(getContext(), attrs);\n    }\n\n    public static class LayoutParams extends ViewGroup.MarginLayoutParams\n            implements AutoLayoutHelper.AutoLayoutParams\n    {\n        private AutoLayoutInfo mAutoLayoutInfo;\n\n        public LayoutParams(Context c, AttributeSet attrs)\n        {\n            super(c, attrs);\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\n        }\n\n        public LayoutParams(int width, int height)\n        {\n            super(width, height);\n        }\n\n        public LayoutParams(ViewGroup.LayoutParams source)\n        {\n            super(source);\n        }\n\n        public LayoutParams(MarginLayoutParams source)\n        {\n            super(source);\n        }\n\n        public LayoutParams(LayoutParams source)\n        {\n            this((ViewGroup.LayoutParams) source);\n            mAutoLayoutInfo = source.mAutoLayoutInfo;\n        }\n\n        @Override\n        public AutoLayoutInfo getAutoLayoutInfo()\n        {\n            return mAutoLayoutInfo;\n        }\n\n\n    }\n\n}\n"
  },
  {
    "path": "autolayout/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <declare-styleable name=\"AutoLayout_Layout\">\n\n        <attr name=\"layout_auto_basewidth\">\n            <flag name=\"width\" value=\"1\"></flag>\n            <flag name=\"height\" value=\"2\"></flag>\n            <flag name=\"textSize\" value=\"4\"></flag>\n            <flag name=\"padding\" value=\"8\"></flag>\n            <flag name=\"margin\" value=\"16\"></flag>\n            <flag name=\"marginLeft\" value=\"32\"></flag>\n            <flag name=\"marginTop\" value=\"64\"></flag>\n            <flag name=\"marginRight\" value=\"128\"></flag>\n            <flag name=\"marginBottom\" value=\"256\"></flag>\n            <flag name=\"paddingLeft\" value=\"512\"></flag>\n            <flag name=\"paddingTop\" value=\"1024\"></flag>\n            <flag name=\"paddingRight\" value=\"2048\"></flag>\n            <flag name=\"paddingBottom\" value=\"4096\"></flag>\n        </attr>\n\n        <attr name=\"layout_auto_baseheight\">\n            <flag name=\"width\" value=\"1\"></flag>\n            <flag name=\"height\" value=\"2\"></flag>\n            <flag name=\"textSize\" value=\"4\"></flag>\n            <flag name=\"padding\" value=\"8\"></flag>\n            <flag name=\"margin\" value=\"16\"></flag>\n            <flag name=\"marginLeft\" value=\"32\"></flag>\n            <flag name=\"marginTop\" value=\"64\"></flag>\n            <flag name=\"marginRight\" value=\"128\"></flag>\n            <flag name=\"marginBottom\" value=\"256\"></flag>\n            <flag name=\"paddingLeft\" value=\"512\"></flag>\n            <flag name=\"paddingTop\" value=\"1024\"></flag>\n            <flag name=\"paddingRight\" value=\"2048\"></flag>\n            <flag name=\"paddingBottom\" value=\"4096\"></flag>\n            <flag name=\"minWidth\" value=\"8192\"></flag>\n            <flag name=\"maxWidth\" value=\"16384\"></flag>\n            <flag name=\"minHeight\" value=\"32768\"></flag>\n            <flag name=\"maxHeight\" value=\"65536\"></flag>\n        </attr>\n\n    </declare-styleable>\n\n\n    <declare-styleable name=\"MetroLayout\">\n        <attr name=\"metro_divider\" format=\"dimension\"></attr>\n    </declare-styleable>\n\n\n</resources>"
  },
  {
    "path": "autolayout/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"id_tag_autolayout_size\" type=\"id\"></item>\n    <item name=\"id_tag_autolayout_padding\" type=\"id\"></item>\n    <item name=\"id_tag_autolayout_margin\" type=\"id\"></item>\n</resources>"
  },
  {
    "path": "autolayout/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">autolayout</string>\n</resources>\n"
  },
  {
    "path": "autolayout-widget/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "autolayout-widget/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        minSdkVersion 10\n        targetSdkVersion 23\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:23.1.0'\n    compile project(':autolayout')\n    compile 'com.android.support:support-v4:23.1.0'\n    compile 'com.android.support:design:23.1.1'\n    compile 'com.android.support:gridlayout-v7:23.1.0'\n    compile 'com.android.support:cardview-v7:23.1.0'\n}\n"
  },
  {
    "path": "autolayout-widget/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "autolayout-widget/src/androidTest/java/com/zhy/autolayout/widget/ApplicationTest.java",
    "content": "package com.zhy.autolayout.widget;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application>\n{\n    public ApplicationTest()\n    {\n        super(Application.class);\n    }\n}"
  },
  {
    "path": "autolayout-widget/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.zhy.autolayout.widget\">\n\n    <application android:allowBackup=\"true\"\n                 android:label=\"@string/app_name\"\n        >\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoActionMenuItemView.java",
    "content": "package com.zhy.autolayout.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\n\nimport android.support.v7.view.menu.ActionMenuItemView;\nimport android.util.AttributeSet;\nimport android.util.TypedValue;\n\n\nimport com.zhy.autolayout.utils.AutoUtils;\nimport com.zhy.autolayout.utils.DimenUtils;\n\n/**\n * Created by hupei on 2016/3/7 14:44.\n */\npublic class AutoActionMenuItemView extends ActionMenuItemView {\n    private static final int NO_VALID = -1;\n    private int mMenuTextSize;\n\n    public AutoActionMenuItemView(Context context) {\n        this(context, null);\n    }\n\n    public AutoActionMenuItemView(Context context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public AutoActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Theme,\n                defStyle, R.style.ThemeOverlay_AppCompat);\n        int menuTextAppearance = a.getResourceId(R.styleable.Theme_actionBarTheme,\n                R.style.ThemeOverlay_AppCompat_ActionBar);\n        mMenuTextSize = loadTextSizeFromTextAppearance(menuTextAppearance);\n        a.recycle();\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        if (!this.isInEditMode()) {\n            setUpTitleTextSize();\n        }\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n    private int loadTextSizeFromTextAppearance(int textAppearanceResId) {\n        TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId,\n                R.styleable.TextAppearance);\n        try {\n            if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize)))\n                return NO_VALID;\n            return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID);\n        } finally {\n            a.recycle();\n        }\n    }\n\n    private void setUpTitleTextSize() {\n        if (mMenuTextSize == -1) return;\n        int autoTextSize = AutoUtils.getPercentHeightSize(mMenuTextSize);\n        setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize);\n    }\n}\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoCardView.java",
    "content": "package com.zhy.autolayout.widget;\n\nimport android.content.Context;\nimport android.support.v7.widget.CardView;\nimport android.util.AttributeSet;\n\nimport com.zhy.autolayout.AutoFrameLayout;\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\n\n/**\n * Created by zhy on 15/12/8.\n */\npublic class AutoCardView extends CardView\n{\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    public AutoCardView(Context context)\n    {\n        super(context);\n    }\n\n    public AutoCardView(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n    }\n\n    public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr)\n    {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new AutoFrameLayout.LayoutParams(getContext(), attrs);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n        if (!isInEditMode())\n        {\n            mHelper.adjustChildren();\n        }\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n\n}\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoLayoutWidgetActivity.java",
    "content": "package com.zhy.autolayout.widget;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.View;\n\nimport com.zhy.autolayout.AutoLayoutActivity;\n\n/**\n * Created by hupei on 2016/3/7 16:44.\n */\npublic class AutoLayoutWidgetActivity extends AutoLayoutActivity {\n\n    private static final String ACTION_MENU_ITEM_VIEW = \"android.support.v7.view.menu.ActionMenuItemView\";\n    private static final String TAB_LAYOUT = \"android.support.design.widget.TabLayout\";\n\n    @Override\n    public View onCreateView(String name, Context context, AttributeSet attrs) {\n        View view = null;\n\n        if (name.equals(ACTION_MENU_ITEM_VIEW)) {\n            view = new AutoActionMenuItemView(context, attrs);\n        }\n        if (name.equals(TAB_LAYOUT)) {\n            view = new AutoTabLayout(context, attrs);\n        }\n\n        if (view != null) return view;\n        return super.onCreateView(name, context, attrs);\n    }\n}"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoRadioGroup.java",
    "content": "package com.zhy.autolayout.widget;\r\n\r\nimport android.content.Context;\r\nimport android.util.AttributeSet;\r\nimport android.view.ViewGroup;\r\nimport android.widget.RadioGroup;\r\n\r\nimport com.zhy.autolayout.AutoLayoutInfo;\r\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\r\n\r\n/**\r\n * Created by hupei on 2016/2/29 9:59.\r\n */\r\npublic class AutoRadioGroup extends RadioGroup\r\n{\r\n    private AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\r\n\r\n    public AutoRadioGroup(Context context)\r\n    {\r\n        super(context);\r\n    }\r\n\r\n    public AutoRadioGroup(Context context, AttributeSet attrs)\r\n    {\r\n        super(context, attrs);\r\n    }\r\n\r\n\r\n    @Override\r\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\r\n    {\r\n        if (!isInEditMode())\r\n            mHelper.adjustChildren();\r\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\r\n    }\r\n\r\n    @Override\r\n    protected void onLayout(boolean changed, int l, int t, int r, int b)\r\n    {\r\n        super.onLayout(changed, l, t, r, b);\r\n    }\r\n\r\n    @Override\r\n    public LayoutParams generateLayoutParams(AttributeSet attrs)\r\n    {\r\n        return new LayoutParams(getContext(), attrs);\r\n    }\r\n\r\n    public static class LayoutParams extends RadioGroup.LayoutParams\r\n            implements AutoLayoutHelper.AutoLayoutParams\r\n    {\r\n        private AutoLayoutInfo mAutoLayoutInfo;\r\n\r\n        public LayoutParams(Context c, AttributeSet attrs)\r\n        {\r\n            super(c, attrs);\r\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\r\n        }\r\n\r\n        @Override\r\n        public AutoLayoutInfo getAutoLayoutInfo()\r\n        {\r\n            return mAutoLayoutInfo;\r\n        }\r\n\r\n\r\n        public LayoutParams(int width, int height)\r\n        {\r\n            super(width, height);\r\n        }\r\n\r\n        public LayoutParams(ViewGroup.LayoutParams source)\r\n        {\r\n            super(source);\r\n        }\r\n\r\n        public LayoutParams(MarginLayoutParams source)\r\n        {\r\n            super(source);\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTabLayout.java",
    "content": "package com.zhy.autolayout.widget;\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.support.design.widget.TabLayout;\nimport android.util.AttributeSet;\nimport android.util.TypedValue;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport com.zhy.autolayout.utils.AutoUtils;\nimport com.zhy.autolayout.utils.DimenUtils;\n\n/**\n * Created by zhy on 16/3/3.\n */\npublic class AutoTabLayout extends TabLayout\n{\n    private static final int NO_VALID = -1;\n    private int mTextSize;\n    private boolean mTextSizeBaseWidth = false;\n\n    public AutoTabLayout(Context context)\n    {\n        this(context, null);\n    }\n\n    public AutoTabLayout(Context context, AttributeSet attrs)\n    {\n        this(context, attrs, 0);\n    }\n\n    public AutoTabLayout(Context context, AttributeSet attrs, int defStyleAttr)\n    {\n        super(context, attrs, defStyleAttr);\n\n        initTextSizeBaseWidth(context, attrs);\n\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabLayout,\n                defStyleAttr, R.style.Widget_Design_TabLayout);\n        int tabTextAppearance = a.getResourceId(R.styleable.TabLayout_tabTextAppearance,\n                R.style.TextAppearance_Design_Tab);\n\n        mTextSize = loadTextSizeFromTextAppearance(tabTextAppearance);\n        a.recycle();\n    }\n\n    private void initTextSizeBaseWidth(Context context, AttributeSet attrs)\n    {\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoTabLayout);\n        mTextSizeBaseWidth = a.getBoolean(R.styleable.AutoTabLayout_auto_textSize_base_width, false);\n        a.recycle();\n    }\n\n    private int loadTextSizeFromTextAppearance(int textAppearanceResId)\n    {\n        TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId,\n                R.styleable.TextAppearance);\n\n        try\n        {\n            if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize)))\n                return NO_VALID;\n            return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID);\n        } finally\n        {\n            a.recycle();\n        }\n    }\n\n    @Override\n    public void addTab(Tab tab, int position, boolean setSelected)\n    {\n        super.addTab(tab, position, setSelected);\n        setUpTabTextSize(tab);\n    }\n\n    @Override\n    public void addTab(Tab tab, boolean setSelected)\n    {\n        super.addTab(tab, setSelected);\n        setUpTabTextSize(tab);\n    }\n\n    private void setUpTabTextSize(Tab tab)\n    {\n        if (mTextSize == NO_VALID || tab.getCustomView() != null) return;\n\n        ViewGroup tabGroup = (ViewGroup) getChildAt(0);\n        ViewGroup tabContainer = (ViewGroup) tabGroup.getChildAt(tab.getPosition());\n        TextView textView = (TextView) tabContainer.getChildAt(1);\n\n\n        if (AutoUtils.autoed(textView))\n        {\n            return;\n        }\n        int autoTextSize = 0 ;\n        if (mTextSizeBaseWidth)\n        {\n            autoTextSize = AutoUtils.getPercentWidthSize(mTextSize);\n        } else\n        {\n            autoTextSize = AutoUtils.getPercentHeightSize(mTextSize);\n        }\n\n\n        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize);\n    }\n\n\n}\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableLayout.java",
    "content": "package com.zhy.autolayout.widget;\r\n\r\nimport android.content.Context;\r\nimport android.util.AttributeSet;\r\nimport android.view.ViewGroup;\r\nimport android.widget.TableLayout;\r\n\r\nimport com.zhy.autolayout.AutoLayoutInfo;\r\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\r\n\r\n/**\r\n * Created by hupei on 2016/2/29 9:59.\r\n */\r\npublic class AutoTableLayout extends TableLayout\r\n{\r\n    private AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\r\n\r\n    public AutoTableLayout(Context context)\r\n    {\r\n        super(context);\r\n    }\r\n\r\n    public AutoTableLayout(Context context, AttributeSet attrs)\r\n    {\r\n        super(context, attrs);\r\n    }\r\n\r\n    @Override\r\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\r\n    {\r\n        if (!isInEditMode())\r\n            mHelper.adjustChildren();\r\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\r\n    }\r\n\r\n\r\n    @Override\r\n    protected void onLayout(boolean changed, int l, int t, int r, int b)\r\n    {\r\n        super.onLayout(changed, l, t, r, b);\r\n    }\r\n\r\n\r\n    @Override\r\n    public LayoutParams generateLayoutParams(AttributeSet attrs)\r\n    {\r\n        return new LayoutParams(getContext(), attrs);\r\n    }\r\n\r\n\r\n    public static class LayoutParams extends TableLayout.LayoutParams\r\n            implements AutoLayoutHelper.AutoLayoutParams\r\n    {\r\n        private AutoLayoutInfo mAutoLayoutInfo;\r\n\r\n        public LayoutParams(Context c, AttributeSet attrs)\r\n        {\r\n            super(c, attrs);\r\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\r\n        }\r\n\r\n        @Override\r\n        public AutoLayoutInfo getAutoLayoutInfo()\r\n        {\r\n            return mAutoLayoutInfo;\r\n        }\r\n\r\n\r\n        public LayoutParams(int width, int height)\r\n        {\r\n            super(width, height);\r\n        }\r\n\r\n\r\n        public LayoutParams(ViewGroup.LayoutParams source)\r\n        {\r\n            super(source);\r\n        }\r\n\r\n        public LayoutParams(MarginLayoutParams source)\r\n        {\r\n            super(source);\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableRow.java",
    "content": "package com.zhy.autolayout.widget;\r\n\r\nimport android.content.Context;\r\nimport android.util.AttributeSet;\r\nimport android.view.ViewGroup;\r\nimport android.widget.TableRow;\r\n\r\nimport com.zhy.autolayout.AutoLayoutInfo;\r\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\r\n\r\n/**\r\n * Created by hupei on 2016/2/29 9:59.\r\n */\r\npublic class AutoTableRow extends TableRow\r\n{\r\n    private AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\r\n\r\n    public AutoTableRow(Context context)\r\n    {\r\n        super(context);\r\n    }\r\n\r\n    public AutoTableRow(Context context, AttributeSet attrs)\r\n    {\r\n        super(context, attrs);\r\n    }\r\n\r\n\r\n    @Override\r\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\r\n    {\r\n        if (!isInEditMode())\r\n            mHelper.adjustChildren();\r\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\r\n    }\r\n\r\n\r\n    @Override\r\n    protected void onLayout(boolean changed, int l, int t, int r, int b)\r\n    {\r\n        super.onLayout(changed, l, t, r, b);\r\n    }\r\n\r\n\r\n    @Override\r\n    public LayoutParams generateLayoutParams(AttributeSet attrs)\r\n    {\r\n        return new LayoutParams(getContext(), attrs);\r\n    }\r\n\r\n\r\n    public static class LayoutParams extends TableRow.LayoutParams\r\n            implements AutoLayoutHelper.AutoLayoutParams\r\n    {\r\n        private AutoLayoutInfo mAutoLayoutInfo;\r\n\r\n        public LayoutParams(Context c, AttributeSet attrs)\r\n        {\r\n            super(c, attrs);\r\n            mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\r\n        }\r\n\r\n        @Override\r\n        public AutoLayoutInfo getAutoLayoutInfo()\r\n        {\r\n            return mAutoLayoutInfo;\r\n        }\r\n\r\n\r\n        public LayoutParams(int width, int height)\r\n        {\r\n            super(width, height);\r\n        }\r\n\r\n\r\n        public LayoutParams(ViewGroup.LayoutParams source)\r\n        {\r\n            super(source);\r\n        }\r\n\r\n        public LayoutParams(MarginLayoutParams source)\r\n        {\r\n            super(source);\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoToolbar.java",
    "content": "package com.zhy.autolayout.widget;\r\n\r\nimport android.content.Context;\r\nimport android.content.res.TypedArray;\r\nimport android.support.v7.widget.Toolbar;\r\nimport android.text.TextUtils;\r\nimport android.util.AttributeSet;\r\nimport android.util.TypedValue;\r\nimport android.widget.TextView;\r\n\r\nimport com.zhy.autolayout.AutoLayoutInfo;\r\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\r\nimport com.zhy.autolayout.utils.AutoUtils;\r\nimport com.zhy.autolayout.utils.DimenUtils;\r\n\r\nimport java.lang.reflect.Field;\r\n\r\n/**\r\n * Created by hupei on 2015/12/28 20:33.\r\n */\r\npublic class AutoToolbar extends Toolbar {\r\n    private static final int NO_VALID = -1;\r\n    private int mTextSize;\r\n    private int mSubTextSize;\r\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\r\n\r\n    public AutoToolbar(Context context, AttributeSet attrs, int defStyleAttr) {\r\n        super(context, attrs, defStyleAttr);\r\n        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Toolbar,\r\n                defStyleAttr, R.style.Widget_AppCompat_Toolbar);\r\n\r\n        int titleTextAppearance = a.getResourceId(R.styleable.Toolbar_titleTextAppearance,\r\n                R.style.TextAppearance_Widget_AppCompat_Toolbar_Title);\r\n\r\n        int subtitleTextAppearance = a.getResourceId(R.styleable.Toolbar_subtitleTextAppearance,\r\n                R.style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle);\r\n\r\n        mTextSize = loadTextSizeFromTextAppearance(titleTextAppearance);\r\n        mSubTextSize = loadTextSizeFromTextAppearance(subtitleTextAppearance);\r\n\r\n        TypedArray menuA = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Theme,\r\n                defStyleAttr, R.style.ThemeOverlay_AppCompat);\r\n        int menuTextAppearance = menuA.getResourceId(R.styleable.Theme_actionBarTheme,\r\n                R.style.ThemeOverlay_AppCompat_ActionBar);\r\n        int menuTextSize = loadTextSizeFromTextAppearance(menuTextAppearance);\r\n\r\n        //防止 menu 定义 textSize，而 Toolbar 无定义 textSize 时，title 的 textSize 随 menu 变化\r\n        if (mTextSize == NO_VALID) mTextSize = menuTextSize;\r\n        if (mSubTextSize == NO_VALID) mSubTextSize = menuTextSize;\r\n\r\n        a.recycle();\r\n        menuA.recycle();\r\n    }\r\n\r\n    public AutoToolbar(Context context, AttributeSet attrs) {\r\n        this(context, attrs, 0);\r\n    }\r\n\r\n    public AutoToolbar(Context context) {\r\n        this(context, null);\r\n    }\r\n\r\n    private int loadTextSizeFromTextAppearance(int textAppearanceResId) {\r\n        TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId,\r\n                R.styleable.TextAppearance);\r\n        try {\r\n            if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize)))\r\n                return NO_VALID;\r\n            return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID);\r\n        } finally {\r\n            a.recycle();\r\n        }\r\n    }\r\n\r\n    private void setUpTitleTextSize() {\r\n        CharSequence title = getTitle();\r\n        if (!TextUtils.isEmpty(title) && mTextSize != NO_VALID)\r\n            setUpTitleTextSize(\"mTitleTextView\", mTextSize);\r\n        CharSequence subtitle = getSubtitle();\r\n        if (!TextUtils.isEmpty(subtitle) && mSubTextSize != NO_VALID)\r\n            setUpTitleTextSize(\"mSubtitleTextView\", mSubTextSize);\r\n    }\r\n\r\n    private void setUpTitleTextSize(String name, int val) {\r\n        try {\r\n            //反射 Toolbar 的 TextView\r\n            Field f = getClass().getSuperclass().getDeclaredField(name);\r\n            f.setAccessible(true);\r\n            TextView textView = (TextView) f.get(this);\r\n            if (textView != null) {\r\n                int autoTextSize = AutoUtils.getPercentHeightSize(val);\r\n                textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize);\r\n            }\r\n        } catch (Exception e) {\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n\r\n    @Override\r\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\r\n        if (!this.isInEditMode()) {\r\n            setUpTitleTextSize();\r\n            this.mHelper.adjustChildren();\r\n        }\r\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\r\n    }\r\n\r\n    @Override\r\n    protected void onLayout(boolean changed, int l, int t, int r, int b) {\r\n        super.onLayout(changed, l, t, r, b);\r\n    }\r\n\r\n    @Override\r\n    public LayoutParams generateLayoutParams(AttributeSet attrs) {\r\n        return new LayoutParams(this.getContext(), attrs);\r\n    }\r\n\r\n    public static class LayoutParams extends Toolbar.LayoutParams implements AutoLayoutHelper.AutoLayoutParams {\r\n        private AutoLayoutInfo mDimenLayoutInfo;\r\n\r\n        public LayoutParams(Context c, AttributeSet attrs) {\r\n            super(c, attrs);\r\n            this.mDimenLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs);\r\n        }\r\n\r\n        @Override\r\n        public AutoLayoutInfo getAutoLayoutInfo() {\r\n            return this.mDimenLayoutInfo;\r\n        }\r\n\r\n        public LayoutParams(int width, int height) {\r\n            super(width, height);\r\n        }\r\n\r\n        public LayoutParams(android.view.ViewGroup.LayoutParams source) {\r\n            super(source);\r\n        }\r\n\r\n        public LayoutParams(MarginLayoutParams source) {\r\n            super(source);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "autolayout-widget/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <declare-styleable name=\"AutoTabLayout\">\n        <attr name=\"auto_textSize_base_width\" format=\"boolean\"></attr>\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "autolayout-widget/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">autolayout-widget</string>\n</resources>\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:1.2.3'\n        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'\n        classpath 'com.github.dcendents:android-maven-plugin:1.2'\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Thu Nov 19 16:52:41 GMT+08:00 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.2.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\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"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\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\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\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\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched.\nif $cygwin ; then\n    [ -n \"$JAVA_HOME\" ] && JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\nfi\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\\\"`/\" >&-\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >&-\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\" ] ; 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\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# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windowz variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\ngoto execute\r\n\r\n:4NT_args\r\n@rem Get arguments from the 4NT Shell from JP Software\r\nset CMD_LINE_ARGS=%$\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\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%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "sample/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "sample/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        applicationId \"com.zhy.sample\"\n        minSdkVersion 10\n        targetSdkVersion 23\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:23.1.0'\n    compile project(':autolayout')\n    compile 'com.zhy:base-adapter:2.0.2'\n    compile 'com.android.support:design:23.1.0'\n    compile 'com.android.support:cardview-v7:23.1.0'\n    compile 'com.android.support:recyclerview-v7:23.2.0'\n}\n"
  },
  {
    "path": "sample/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "sample/src/androidTest/java/com/zhy/sample/ApplicationTest.java",
    "content": "package com.zhy.sample;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application>\n{\n    public ApplicationTest()\n    {\n        super(Application.class);\n    }\n}"
  },
  {
    "path": "sample/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.zhy.sample\" >\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\" >\n        <activity\n            android:screenOrientation=\"portrait\"\n            android:name=\".MainActivity\"\n            android:label=\"@string/app_name\" >\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\n        <meta-data\n            android:name=\"design_width\"\n            android:value=\"1080\" />\n        <meta-data\n            android:name=\"design_height\"\n            android:value=\"1920\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/CategoryActivity.java",
    "content": "package com.zhy.sample;\n\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.support.design.widget.TabLayout;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.app.FragmentPagerAdapter;\nimport android.support.v4.view.ViewPager;\n\nimport com.zhy.autolayout.AutoLayoutActivity;\nimport com.zhy.sample.fragment.SimpleFragment;\n\npublic class CategoryActivity extends AutoLayoutActivity\n{\n\n    private TabLayout mTabLayout;\n    private ViewPager mViewPager;\n\n    private String[] mTabTitles = new String[]\n            {\"单个UI\", \"正方形\"};\n\n\n    @Override\n    public Context getBaseContext()\n    {\n        return super.getBaseContext();\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState)\n    {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_category);\n\n\n        mTabLayout = (TabLayout) findViewById(R.id.id_tablayout);\n        mViewPager = (ViewPager) findViewById(R.id.id_viewpager);\n\n        mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager())\n        {\n            @Override\n            public Fragment getItem(int i)\n            {\n                return new SimpleFragment();\n            }\n\n            @Override\n            public CharSequence getPageTitle(int position)\n            {\n\n                return mTabTitles[position];\n            }\n\n            @Override\n            public int getCount()\n            {\n                return mTabTitles.length;\n            }\n        });\n\n\n        mTabLayout.setupWithViewPager(mViewPager);\n    }\n\n}\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/MainActivity.java",
    "content": "package com.zhy.sample;\r\n\r\nimport android.os.Build.VERSION;\r\nimport android.os.Build.VERSION_CODES;\r\nimport android.os.Bundle;\r\nimport android.support.v4.app.Fragment;\r\nimport android.support.v4.app.FragmentManager;\r\nimport android.support.v4.app.FragmentPagerAdapter;\r\nimport android.support.v4.view.ViewPager;\r\nimport android.view.Menu;\r\nimport android.view.WindowManager;\r\n\r\nimport com.zhy.autolayout.AutoLayoutActivity;\r\nimport com.zhy.sample.fragment.ListFragment;\r\nimport com.zhy.sample.fragment.PayFragment;\r\nimport com.zhy.sample.fragment.RecyclerViewFragment;\r\nimport com.zhy.sample.fragment.RecyclerViewGridFragment;\r\nimport com.zhy.sample.fragment.RegisterFragment;\r\nimport com.zhy.sample.fragment.TestFragment;\r\n\r\nimport java.util.ArrayList;\r\n\r\npublic class MainActivity extends AutoLayoutActivity\r\n{\r\n\r\n\tprivate ViewPager mViewPager;\r\n\r\n\t@Override\r\n\tprotected void onCreate(Bundle savedInstanceState) {\r\n\t\tsuper.onCreate(savedInstanceState);\r\n\t\t//requestWindowFeature(Window.FEATURE_NO_TITLE);\r\n\t\tsetImmersionStatus();\r\n\t\tsetContentView(R.layout.activity_main);\r\n\r\n\r\n\t\tinitView();\r\n\t\tinitDatas();\r\n\t}\r\n\r\n\tprivate void setImmersionStatus() {\r\n\t\tif (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {\r\n\t\t\t// 透明状态栏\r\n\t\t\tgetWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);\r\n\t\t\t// 透明导航栏\r\n//\t\t\tgetWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate void initDatas() {\r\n\t\tArrayList<Fragment> mList = new ArrayList<Fragment>();\r\n\t\tmList.add(new ListFragment());\r\n\t\tmList.add(new RegisterFragment());\r\n\t\tmList.add(new PayFragment());\r\n\t\tmList.add(new RecyclerViewFragment());\r\n\t\tmList.add(new RecyclerViewGridFragment());\r\n\t\tmList.add(new TestFragment());\r\n\t\tmViewPager.setAdapter(new MyAdapter(getSupportFragmentManager(), mList));\r\n\t}\r\n\r\n\tprivate void initView() {\r\n\t\tmViewPager = (ViewPager) findViewById(R.id.id_viewpager);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean onCreateOptionsMenu(Menu menu)\r\n\t{\r\n\t\t// Inflate the menu; this adds items to the action bar if it is present.\r\n\t\tgetMenuInflater().inflate(R.menu.menu_main, menu);\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\tpublic class MyAdapter extends FragmentPagerAdapter {\r\n\t\tArrayList<Fragment> tabs = null;\r\n\r\n\t\tpublic MyAdapter(FragmentManager fm, ArrayList<Fragment> tabs) {\r\n\t\t\tsuper(fm);\r\n\t\t\tthis.tabs = tabs;\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic Fragment getItem(int pos) {\r\n\t\t\treturn tabs.get(pos);\r\n\t\t}\r\n\r\n\t\t@Override\r\n\t\tpublic int getCount() {\r\n\t\t\treturn tabs.size();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/UseDeviceSizeApplication.java",
    "content": "package com.zhy.sample;\n\nimport android.app.Application;\n\nimport com.zhy.autolayout.config.AutoLayoutConifg;\n\n/**\n * Created by zhy on 15/12/23.\n */\npublic class UseDeviceSizeApplication extends Application\n{\n    @Override\n    public void onCreate()\n    {\n        super.onCreate();\n        AutoLayoutConifg.getInstance().useDeviceSize().init(this);\n    }\n}\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/ListFragment.java",
    "content": "package com.zhy.sample.fragment;\r\n\r\nimport android.content.Context;\r\nimport android.os.Bundle;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.BaseAdapter;\r\nimport android.widget.ListView;\r\n\r\nimport com.zhy.autolayout.utils.AutoUtils;\r\nimport com.zhy.sample.R;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\npublic class ListFragment extends Fragment\r\n{\r\n    private View mView;\r\n    private ListView mlistview;\r\n    private List<String> mList;\r\n    private Context mContext;\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)\r\n    {\r\n        mView = inflater.inflate(R.layout.fragment_list, container, false);\r\n        initView();\r\n        return mView;\r\n    }\r\n\r\n    private void initView()\r\n    {\r\n        mContext = getActivity();\r\n        mlistview = (ListView) mView.findViewById(R.id.id_listview);\r\n        mList = new ArrayList<String>();\r\n        for (int i = 0; i < 50; i++)\r\n        {\r\n            mList.add(i + \"\");\r\n        }\r\n        mlistview.setAdapter(new MyAdapter());\r\n\r\n//        mlistview.setAdapter(new CommonAdapter<String>(getActivity(),R.layout.list_item,mList)\r\n//        {\r\n//            @Override\r\n//            protected void onConvertViewCreated(View convertView)\r\n//            {\r\n//                AutoUtils.autoSize(convertView);\r\n//            }\r\n//\r\n//            @Override\r\n//            public void convert(com.zhy.base.adapter.ViewHolder viewHolder, String s)\r\n//            {\r\n//\r\n//            }\r\n//        });\r\n    }\r\n\r\n    class MyAdapter extends BaseAdapter\r\n    {\r\n\r\n        @Override\r\n        public int getCount()\r\n        {\r\n            return mList.size();\r\n        }\r\n\r\n        @Override\r\n        public Object getItem(int arg0)\r\n        {\r\n            return mList.get(arg0);\r\n        }\r\n\r\n        @Override\r\n        public long getItemId(int position)\r\n        {\r\n            return position;\r\n        }\r\n\r\n        @Override\r\n        public View getView(int position, View convertView, ViewGroup parent)\r\n        {\r\n            ViewHolder holder = null;\r\n            if (convertView == null)\r\n            {\r\n                holder = new ViewHolder();\r\n                convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);\r\n                convertView.setTag(holder);\r\n                //对于listview，注意添加这一行，即可在item上使用高度\r\n                AutoUtils.autoSize(convertView);\r\n            } else\r\n            {\r\n                holder = (ViewHolder) convertView.getTag();\r\n            }\r\n\r\n            return convertView;\r\n        }\r\n\r\n    }\r\n\r\n    class ViewHolder\r\n    {\r\n\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/PayFragment.java",
    "content": "package com.zhy.sample.fragment;\r\n\r\nimport android.os.Bundle;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\n\r\nimport com.zhy.sample.R;\r\n\r\npublic class PayFragment extends Fragment\r\n{\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)\r\n    {\r\n        return inflater.inflate(R.layout.fragment_pay, container, false);\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/RecyclerViewFragment.java",
    "content": "package com.zhy.sample.fragment;\r\n\r\nimport android.content.Context;\r\nimport android.os.Bundle;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.support.v7.widget.LinearLayoutManager;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\n\r\nimport com.zhy.autolayout.utils.AutoUtils;\r\nimport com.zhy.base.adapter.recyclerview.CommonAdapter;\r\nimport com.zhy.sample.R;\r\nimport com.zhy.sample.view.DividerItemDecoration;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\npublic class RecyclerViewFragment extends Fragment\r\n{\r\n    private View mView;\r\n    private RecyclerView mRecyclerView;\r\n    private List<String> mList;\r\n    private Context mContext;\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)\r\n    {\r\n        mView = inflater.inflate(R.layout.fragment_recyclerview, container, false);\r\n        initView();\r\n        return mView;\r\n    }\r\n\r\n    private void initView()\r\n    {\r\n        mContext = getActivity();\r\n        mRecyclerView = (RecyclerView) mView.findViewById(R.id.id_recyclerview);\r\n        mList = new ArrayList<String>();\r\n        for (int i = 0; i < 50; i++)\r\n        {\r\n            mList.add(i + \"\");\r\n        }\r\n        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));\r\n        mRecyclerView.setAdapter(new MyAdapter(getActivity(),mList));\r\n\r\n        mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),\r\n                DividerItemDecoration.VERTICAL_LIST));\r\n    }\r\n\r\n    class MyAdapter extends CommonAdapter<String>\r\n    {\r\n        public MyAdapter(Context context, List<String> datas)\r\n        {\r\n            super(context, R.layout.recyclerview_item, datas);\r\n        }\r\n\r\n        @Override\r\n        public com.zhy.base.adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)\r\n        {\r\n            com.zhy.base.adapter.ViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);\r\n            AutoUtils.autoSize(viewHolder.getConvertView());\r\n            return viewHolder;\r\n        }\r\n\r\n        @Override\r\n        public void convert(com.zhy.base.adapter.ViewHolder viewHolder, String s)\r\n        {\r\n        }\r\n    }\r\n\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/RecyclerViewGridFragment.java",
    "content": "package com.zhy.sample.fragment;\r\n\r\nimport android.content.Context;\r\nimport android.graphics.Color;\r\nimport android.os.Bundle;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.support.v7.widget.GridLayoutManager;\r\nimport android.support.v7.widget.RecyclerView;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\n\r\nimport com.zhy.autolayout.attr.AutoAttr;\r\nimport com.zhy.autolayout.utils.AutoUtils;\r\nimport com.zhy.sample.R;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport java.util.Random;\r\n\r\npublic class RecyclerViewGridFragment extends Fragment\r\n{\r\n    private View mView;\r\n    private RecyclerView mRecyclerView;\r\n    private List<String> mList;\r\n    private Context mContext;\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)\r\n    {\r\n        mView = inflater.inflate(R.layout.fragment_recyclerview_grid, container, false);\r\n        initView();\r\n        return mView;\r\n    }\r\n\r\n    private void initView()\r\n    {\r\n        mContext = getActivity();\r\n        mRecyclerView = (RecyclerView) mView.findViewById(R.id.id_recyclerview);\r\n        mList = new ArrayList<String>();\r\n        for (int i = 0; i < 50; i++)\r\n        {\r\n            mList.add(i + \"\");\r\n        }\r\n        mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false));\r\n        mRecyclerView.setAdapter(new MyAdapter());\r\n\r\n    }\r\n\r\n    class MyAdapter extends RecyclerView.Adapter<ViewHolder>\r\n    {\r\n        @Override\r\n        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)\r\n        {\r\n            View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_grid, parent, false);\r\n            return new ViewHolder(convertView);\r\n        }\r\n\r\n        @Override\r\n        public void onBindViewHolder(ViewHolder holder, int position)\r\n        {\r\n\r\n        }\r\n\r\n        @Override\r\n        public long getItemId(int position)\r\n        {\r\n            return position;\r\n        }\r\n\r\n        @Override\r\n        public int getItemCount()\r\n        {\r\n            return mList.size();\r\n        }\r\n\r\n\r\n    }\r\n\r\n    static class ViewHolder extends RecyclerView.ViewHolder\r\n    {\r\n\r\n        public ViewHolder(View itemView)\r\n        {\r\n            super(itemView);\r\n            Random random = new Random();\r\n            itemView.setBackgroundColor(Color.argb(200, random.nextInt(255), random.nextInt(255), random.nextInt(255)));\r\n            //recyclerview，注意添加这一行\r\n            AutoUtils.autoSize(itemView, AutoAttr.BASE_HEIGHT);\r\n//            Log.e(\"\", itemView.getLayoutParams().width + \"  , \" + itemView.getLayoutParams().height);\r\n        }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/RegisterFragment.java",
    "content": "package com.zhy.sample.fragment;\r\n\r\nimport android.os.Bundle;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\n\r\nimport com.zhy.sample.R;\r\n\r\npublic class RegisterFragment extends Fragment {\r\n\r\n\t@Override\r\n\tpublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n\t\treturn inflater.inflate(R.layout.fragment_register, container,false);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/SimpleFragment.java",
    "content": "package com.zhy.sample.fragment;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport android.support.v4.app.Fragment;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.zhy.sample.R;\n\npublic class SimpleFragment extends Fragment\n{\n\n    @Nullable\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)\n    {\n        return inflater.inflate(R.layout.activity_main, container, false);\n    }\n\n\n}\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/fragment/TestFragment.java",
    "content": "package com.zhy.sample.fragment;\r\n\r\nimport android.os.Bundle;\r\nimport android.support.annotation.Nullable;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\n\r\nimport com.zhy.sample.R;\r\n\r\npublic class TestFragment extends Fragment\r\n{\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)\r\n    {\r\n        return inflater.inflate(R.layout.activity_test, container, false);\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/view/AutoCardView.java",
    "content": "package com.zhy.sample.view;\n\nimport android.content.Context;\nimport android.support.v7.widget.CardView;\nimport android.util.AttributeSet;\n\nimport com.zhy.autolayout.AutoFrameLayout;\nimport com.zhy.autolayout.utils.AutoLayoutHelper;\n\n/**\n * Created by zhy on 15/12/8.\n */\npublic class AutoCardView extends CardView\n{\n    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);\n\n    public AutoCardView(Context context)\n    {\n        super(context);\n    }\n\n    public AutoCardView(Context context, AttributeSet attrs)\n    {\n        super(context, attrs);\n    }\n\n    public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr)\n    {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs)\n    {\n        return new AutoFrameLayout.LayoutParams(getContext(), attrs);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)\n    {\n        if (!isInEditMode())\n        {\n            mHelper.adjustChildren();\n        }\n        super.onMeasure(widthMeasureSpec, heightMeasureSpec);\n    }\n\n\n}\n"
  },
  {
    "path": "sample/src/main/java/com/zhy/sample/view/DividerItemDecoration.java",
    "content": "package com.zhy.sample.view;/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * limitations under the License.\n */\n\nimport android.content.Context;\nimport android.content.res.TypedArray;\nimport android.graphics.Canvas;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.util.Log;\nimport android.view.View;\n\n\n/**\n * This class is from the v7 samples of the Android SDK. It's not by me!\n * <p/>\n * See the license above for details.\n */\npublic class DividerItemDecoration extends RecyclerView.ItemDecoration {\n\n    private static final int[] ATTRS = new int[]{\n            android.R.attr.listDivider\n    };\n\n    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;\n\n    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;\n\n    private Drawable mDivider;\n\n    private int mOrientation;\n\n    public DividerItemDecoration(Context context, int orientation) {\n        final TypedArray a = context.obtainStyledAttributes(ATTRS);\n        mDivider = a.getDrawable(0);\n        a.recycle();\n        setOrientation(orientation);\n    }\n\n    public void setOrientation(int orientation) {\n        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {\n            throw new IllegalArgumentException(\"invalid orientation\");\n        }\n        mOrientation = orientation;\n    }\n\n    @Override\n    public void onDraw(Canvas c, RecyclerView parent) {\n        Log.v(\"recyclerview - itemdecoration\", \"onDraw()\");\n\n        if (mOrientation == VERTICAL_LIST) {\n            drawVertical(c, parent);\n        } else {\n            drawHorizontal(c, parent);\n        }\n\n    }\n\n\n    public void drawVertical(Canvas c, RecyclerView parent) {\n        final int left = parent.getPaddingLeft();\n        final int right = parent.getWidth() - parent.getPaddingRight();\n\n        final int childCount = parent.getChildCount();\n        for (int i = 0; i < childCount; i++) {\n            final View child = parent.getChildAt(i);\n            RecyclerView v = new RecyclerView(parent.getContext());\n            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child\n                    .getLayoutParams();\n            final int top = child.getBottom() + params.bottomMargin;\n            final int bottom = top + mDivider.getIntrinsicHeight();\n            mDivider.setBounds(left, top, right, bottom);\n            mDivider.draw(c);\n        }\n    }\n\n    public void drawHorizontal(Canvas c, RecyclerView parent) {\n        final int top = parent.getPaddingTop();\n        final int bottom = parent.getHeight() - parent.getPaddingBottom();\n\n        final int childCount = parent.getChildCount();\n        for (int i = 0; i < childCount; i++) {\n            final View child = parent.getChildAt(i);\n            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child\n                    .getLayoutParams();\n            final int left = child.getRight() + params.rightMargin;\n            final int right = left + mDivider.getIntrinsicHeight();\n            mDivider.setBounds(left, top, right, bottom);\n            mDivider.draw(c);\n        }\n    }\n\n    @Override\n    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {\n        if (mOrientation == VERTICAL_LIST) {\n            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());\n        } else {\n            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);\n        }\n    }\n}"
  },
  {
    "path": "sample/src/main/res/drawable/selector_btn_stroke_orange.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n\r\n    <item android:drawable=\"@drawable/shape_btn_edge_orange_pre\" android:state_pressed=\"true\"></item>\r\n    <item android:drawable=\"@drawable/shape_btn_edge_orange\" ></item>\r\n\r\n</selector>"
  },
  {
    "path": "sample/src/main/res/drawable/selector_pay_radio.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\r\n    \r\n    <item android:drawable=\"@drawable/daili_xuanzhong\" android:state_checked=\"true\"></item>\r\n    <item android:drawable=\"@drawable/daili_xuanzhong\" android:state_selected=\"true\"></item>\r\n    <item android:drawable=\"@drawable/daili_xuanzhong\" android:state_pressed=\"true\"></item>\r\n    <item android:drawable=\"@drawable/daili_yuanquan\" android:state_checked=\"false\"></item>\r\n    <item android:drawable=\"@drawable/daili_yuanquan\" android:state_selected=\"false\"></item>\r\n    <item android:drawable=\"@drawable/daili_yuanquan\" android:state_pressed=\"false\"></item>\r\n    <item android:drawable=\"@drawable/daili_xuanzhong\"></item>\r\n</selector>"
  },
  {
    "path": "sample/src/main/res/drawable/shape_btn_edge_orange.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:shape=\"rectangle\" >\r\n\r\n    <corners android:radius=\"3dp\" />\r\n\r\n    <solid android:color=\"#FFFFFF\" />\r\n\r\n    <stroke\r\n        android:width=\"1dp\"\r\n        android:color=\"@color/btn_bg\" />\r\n\r\n</shape>"
  },
  {
    "path": "sample/src/main/res/drawable/shape_btn_edge_orange_pre.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:shape=\"rectangle\" >\r\n\r\n    <corners android:radius=\"3dp\" />\r\n\r\n    <solid android:color=\"#f8f8f8\" />\r\n\r\n    <stroke\r\n        android:width=\"1dp\"\r\n        android:color=\"@color/btn_bg\" />\r\n\r\n</shape>"
  },
  {
    "path": "sample/src/main/res/drawable/shape_edit_stroke.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:shape=\"rectangle\" >\r\n\r\n    <stroke\r\n        android:width=\"0.8dp\"\r\n        android:color=\"#d7d7d7\" />\r\n\r\n    <solid android:color=\"#ffffff\"/>\r\n\r\n    <corners android:radius=\"3dp\" />\r\n\r\n</shape>"
  },
  {
    "path": "sample/src/main/res/layout/activity_category.xml",
    "content": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n              xmlns:tools=\"http://schemas.android.com/tools\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:orientation=\"vertical\"\n    >\n\n    <android.support.design.widget.TabLayout\n        android:id=\"@+id/id_tablayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        app:tabGravity=\"fill\"\n        android:background=\"#FFFFFF\"\n        app:tabIndicatorColor=\"#1fb6c4\"\n        app:tabMode=\"fixed\"\n        app:tabSelectedTextColor=\"#1fb6c4\"\n        app:tabTextColor=\"#000000\"/>\n\n    <android.support.v4.view.ViewPager\n        android:id=\"@+id/id_viewpager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_weight=\"1\"\n        />\n\n</LinearLayout>\n"
  },
  {
    "path": "sample/src/main/res/layout/activity_main.xml",
    "content": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              xmlns:tools=\"http://schemas.android.com/tools\"\n              style=\"@style/immersion_status\"\n              android:layout_width=\"match_parent\"\n              android:layout_height=\"match_parent\"\n              android:background=\"#ff6600\"\n              android:orientation=\"vertical\" >\n\n    <include layout=\"@layout/app_base_title\" />\n    <android.support.v4.view.ViewPager\n        android:id=\"@+id/id_viewpager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_weight=\"1\"\n        android:background=\"#ffffff\" />\n\n</LinearLayout>"
  },
  {
    "path": "sample/src/main/res/layout/activity_test.xml",
    "content": "<FrameLayout style=\"@style/immersion_status\"\n             xmlns:android=\"http://schemas.android.com/apk/res/android\"\n             xmlns:tools=\"http://schemas.android.com/tools\"\n             android:layout_width=\"match_parent\"\n             android:layout_height=\"match_parent\"\n             android:orientation=\"vertical\">\n\n    <TextView\n        android:layout_width=\"920px\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"20px\"\n        android:gravity=\"left\"\n        android:text=\"title高度130\\nmarginTop=1658\\n自身高度=132\\n130+1658+132 = 1920\\n用于测试底部操作栏是否影响UI。\"\n        android:textSize=\"49px\"/>\n\n\n    <!--title高度130,marginTop=1658,自身高度=132; 130+1658+132 = 1920;-->\n    <TextView\n        android:layout_width=\"920px\"\n        android:layout_height=\"132px\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginTop=\"1658px\"\n        android:background=\"#76ff5a\"\n        android:clickable=\"true\"\n        android:gravity=\"center\"\n        android:text=\"完成注册\"\n        android:textColor=\"@android:color/white\"\n        android:textSize=\"49px\"/>\n</FrameLayout>"
  },
  {
    "path": "sample/src/main/res/layout/app_base_title.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:id=\"@+id/title_parentlayout\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"130px\"\r\n    android:background=\"#ff6600\" >\r\n\r\n    <TextView\r\n        android:id=\"@+id/title_lefttextview\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:gravity=\"center_vertical\"\r\n        android:text=\"左侧文字\"\r\n        android:textColor=\"@android:color/white\"\r\n        android:textSize=\"52px\"\r\n        android:visibility=\"gone\" />\r\n\r\n    <ImageView\r\n        android:id=\"@+id/title_leftimageview\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_alignParentLeft=\"true\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:src=\"@drawable/login_fanhui\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/title_centertextview\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_centerHorizontal=\"true\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:text=\"中间文字\"\r\n        android:textColor=\"@android:color/white\"\r\n        android:textSize=\"51px\" />\r\n\r\n    <ImageView\r\n        android:id=\"@+id/title_centerimageview\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_centerInParent=\"true\"\r\n        android:src=\"@drawable/ic_launcher\"\r\n        android:visibility=\"gone\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/title_righttextview\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_alignParentRight=\"true\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:layout_marginRight=\"20dp\"\r\n        android:text=\"右侧文字\"\r\n        android:textColor=\"@android:color/white\"\r\n        android:textSize=\"52px\"\r\n        android:visibility=\"gone\" />\r\n\r\n    <ImageView\r\n        android:id=\"@+id/title_rightimageview\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_alignParentRight=\"true\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:src=\"@drawable/ic_launcher\"\r\n        android:visibility=\"gone\" />\r\n\r\n</RelativeLayout>"
  },
  {
    "path": "sample/src/main/res/layout/fragment_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n             android:layout_width=\"match_parent\"\r\n             android:layout_height=\"match_parent\"\r\n    >\r\n\r\n    <ListView\r\n        android:id=\"@+id/id_listview\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        >\r\n    </ListView>\r\n\r\n</FrameLayout>"
  },
  {
    "path": "sample/src/main/res/layout/fragment_pay.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- 缴纳代理费 -->\r\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n              android:layout_width=\"match_parent\"\r\n              android:layout_height=\"match_parent\"\r\n              android:orientation=\"vertical\">\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"305px\"\r\n        android:background=\"@drawable/wode_zijin_dise\"\r\n        android:orientation=\"vertical\">\r\n\r\n        <TextView\r\n            android:id=\"@+id/proxy_level\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_gravity=\"center_horizontal\"\r\n            android:layout_marginTop=\"70px\"\r\n            android:text=\"A级代理商\"\r\n            android:textSize=\"46px\"/>\r\n\r\n        <TextView\r\n            android:id=\"@+id/proxy_money\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_gravity=\"center_horizontal\"\r\n            android:layout_marginTop=\"53px\"\r\n            android:text=\"￥200000.00\"\r\n            android:textSize=\"60px\"/>\r\n    </LinearLayout>\r\n\r\n    <TextView\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"145px\"\r\n        android:gravity=\"center_vertical\"\r\n        android:paddingLeft=\"40px\"\r\n        android:paddingRight=\"40px\"\r\n        android:text=\"支付方式\"\r\n        android:textSize=\"40px\"/>\r\n\r\n    <View\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"0.2dp\"\r\n        android:background=\"@color/edittext_bg\"/>\r\n\r\n    <LinearLayout\r\n        android:id=\"@+id/weixin_pay_layout\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"202px\"\r\n        android:orientation=\"horizontal\"\r\n        android:paddingLeft=\"40px\"\r\n        android:paddingRight=\"80px\">\r\n\r\n        <ImageView\r\n            android:layout_width=\"165px\"\r\n            android:layout_height=\"143px\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginRight=\"24px\"\r\n            android:src=\"@drawable/wode_weixinzhifu\"/>\r\n\r\n        <LinearLayout\r\n            android:layout_width=\"0dp\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_weight=\"1\"\r\n            android:orientation=\"vertical\">\r\n\r\n            <TextView\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"45px\"\r\n                android:text=\"微信支付\"\r\n                android:textSize=\"36px\"/>\r\n\r\n            <TextView\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"27px\"\r\n                android:text=\"推荐安装微信5.0及以上版本的使用\"\r\n                android:textColor=\"@color/textcolor\"\r\n                android:textSize=\"30px\"/>\r\n        </LinearLayout>\r\n\r\n        <RadioButton\r\n            android:id=\"@+id/weixin_check_radio\"\r\n            android:layout_width=\"50px\"\r\n            android:layout_height=\"50px\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:background=\"@drawable/selector_pay_radio\"\r\n            android:button=\"@null\"\r\n            android:clickable=\"false\"/>\r\n    </LinearLayout>\r\n\r\n    <View\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"0.2dp\"\r\n        android:background=\"@color/edittext_bg\"/>\r\n\r\n    <LinearLayout\r\n        android:id=\"@+id/zhifubao_pay_layout\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"202px\"\r\n        android:orientation=\"horizontal\"\r\n        android:paddingLeft=\"40px\"\r\n        android:paddingRight=\"80px\">\r\n\r\n        <ImageView\r\n            android:layout_width=\"165px\"\r\n            android:layout_height=\"143px\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginRight=\"24px\"\r\n            android:src=\"@drawable/wode_zhifubaozhifu\"/>\r\n\r\n        <LinearLayout\r\n            android:layout_width=\"0dp\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_weight=\"1\"\r\n            android:orientation=\"vertical\">\r\n\r\n            <TextView\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"45px\"\r\n                android:text=\"支付宝支付\"\r\n                android:textSize=\"36px\"/>\r\n\r\n            <TextView\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"27px\"\r\n                android:text=\"推荐使用支付宝账号的用户使用\"\r\n                android:textColor=\"@color/textcolor\"\r\n                android:textSize=\"30px\"/>\r\n        </LinearLayout>\r\n\r\n        <RadioButton\r\n            android:id=\"@+id/zhifubao_check_radio\"\r\n            android:layout_width=\"50px\"\r\n            android:layout_height=\"50px\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:background=\"@drawable/selector_pay_radio\"\r\n            android:button=\"@null\"\r\n            android:clickable=\"false\"/>\r\n    </LinearLayout>\r\n\r\n    <View\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"0.2dp\"\r\n        android:background=\"@color/edittext_bg\"/>\r\n\r\n    <TextView\r\n        android:id=\"@+id/more_pay_methods\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:layout_marginTop=\"42px\"\r\n        android:text=\"查看更多支付方式\"\r\n        android:textSize=\"36px\"/>\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"122px\"\r\n        android:layout_marginTop=\"129px\"\r\n        android:orientation=\"horizontal\"\r\n        android:paddingLeft=\"40px\"\r\n        android:paddingRight=\"40px\">\r\n\r\n        <TextView\r\n            android:id=\"@+id/confirm_pay\"\r\n            android:layout_width=\"474px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_marginRight=\"54px\"\r\n            android:background=\"#ff6600\"\r\n            android:clickable=\"true\"\r\n            android:gravity=\"center\"\r\n            android:text=\"确认支付\"\r\n            android:textColor=\"@android:color/white\"\r\n            android:textSize=\"39px\"/>\r\n\r\n        <TextView\r\n            android:id=\"@+id/later_pay\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n            android:background=\"@drawable/selector_btn_stroke_orange\"\r\n            android:clickable=\"true\"\r\n            android:gravity=\"center\"\r\n            android:text=\"先看看\"\r\n            android:textColor=\"@color/btn_bg\"\r\n            android:textSize=\"39px\"/>\r\n    </LinearLayout>\r\n\r\n</LinearLayout>"
  },
  {
    "path": "sample/src/main/res/layout/fragment_recyclerview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n             android:layout_width=\"match_parent\"\r\n             android:layout_height=\"match_parent\"\r\n    >\r\n\r\n    <android.support.v7.widget.RecyclerView\r\n        android:id=\"@+id/id_recyclerview\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        >\r\n    </android.support.v7.widget.RecyclerView>\r\n\r\n</FrameLayout>"
  },
  {
    "path": "sample/src/main/res/layout/fragment_recyclerview_grid.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n             android:layout_width=\"match_parent\"\r\n             android:layout_height=\"match_parent\"\r\n    >\r\n\r\n    <android.support.v7.widget.RecyclerView\r\n        android:id=\"@+id/id_recyclerview\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        >\r\n    </android.support.v7.widget.RecyclerView>\r\n\r\n</FrameLayout>"
  },
  {
    "path": "sample/src/main/res/layout/fragment_register.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- 账号注册 -->\r\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:orientation=\"vertical\" >\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"920px\"\r\n        android:layout_height=\"130px\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:layout_marginTop=\"94px\"\r\n        android:background=\"@drawable/shape_edit_stroke\"\r\n        android:orientation=\"horizontal\" >\r\n\r\n        <ImageView\r\n            android:layout_width=\"57px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginLeft=\"40px\"\r\n            android:src=\"@drawable/login_dengluhao\"\r\n            android:text=\"设置密码\" />\r\n\r\n        <View\r\n            android:layout_width=\"0.5px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_marginLeft=\"40px\"\r\n            android:background=\"@color/line\" />\r\n\r\n        <EditText\r\n            android:gravity=\"center\"\r\n            android:id=\"@+id/login_regist_count\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginLeft=\"13px\"\r\n            android:background=\"@null\"\r\n            android:hint=\"手机号即为登录账号\"\r\n            android:singleLine=\"true\"\r\n            android:textColor=\"@color/textcolor\"\r\n            android:textSize=\"40px\" />\r\n    </LinearLayout>\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"920px\"\r\n        android:layout_height=\"130px\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:layout_marginTop=\"20px\"\r\n        android:orientation=\"horizontal\" >\r\n\r\n        <LinearLayout\r\n            android:layout_width=\"680px\"\r\n            android:layout_height=\"130px\"\r\n            android:background=\"@drawable/shape_edit_stroke\"\r\n            android:orientation=\"horizontal\" >\r\n\r\n            <ImageView\r\n                android:layout_width=\"57px\"\r\n                android:layout_height=\"70px\"\r\n                android:layout_gravity=\"center_vertical\"\r\n                android:layout_marginLeft=\"40px\"\r\n                android:src=\"@drawable/login_yanzhengma\"\r\n                android:text=\"设置密码\" />\r\n\r\n            <View\r\n                android:layout_width=\"0.5px\"\r\n                android:layout_height=\"match_parent\"\r\n                android:layout_marginLeft=\"40px\"\r\n                android:background=\"@color/line\" />\r\n\r\n            <EditText\r\n                android:id=\"@+id/login_regist_yzm\"\r\n                android:layout_width=\"wrap_content\"\r\n                android:layout_height=\"match_parent\"\r\n                android:layout_gravity=\"center_vertical\"\r\n                android:layout_marginLeft=\"13px\"\r\n                android:background=\"@null\"\r\n                android:hint=\"请输入验证码\"\r\n                android:singleLine=\"true\"\r\n                android:textColor=\"@color/textcolor\"\r\n                android:textSize=\"40px\" />\r\n        </LinearLayout>\r\n\r\n        <View\r\n            android:layout_width=\"20px\"\r\n            android:layout_height=\"match_parent\" />\r\n\r\n        <TextView\r\n            android:id=\"@+id/login_regist_getpwd\"\r\n            android:layout_width=\"0dp\"\r\n            android:layout_weight=\"1\"\r\n            android:layout_height=\"match_parent\"\r\n            android:background=\"#ff6600\"\r\n            android:clickable=\"true\"\r\n            android:gravity=\"center\"\r\n            android:text=\"获取验证码\"\r\n            android:textColor=\"@android:color/white\"\r\n            android:textSize=\"40px\" />\r\n    </LinearLayout>\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"920px\"\r\n        android:layout_height=\"130px\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:layout_marginTop=\"20px\"\r\n        android:background=\"@drawable/shape_edit_stroke\"\r\n        android:orientation=\"horizontal\" >\r\n\r\n        <ImageView\r\n            android:layout_width=\"57px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginLeft=\"40px\"\r\n            android:src=\"@drawable/login_miam\"\r\n            android:text=\"设置密码\" />\r\n\r\n        <View\r\n            android:layout_width=\"0.5px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_marginLeft=\"40px\"\r\n            android:background=\"@color/line\" />\r\n\r\n        <EditText\r\n            android:id=\"@+id/login_regist_pwd\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginLeft=\"13px\"\r\n            android:background=\"@null\"\r\n            android:hint=\"请输入6~16位密码\"\r\n            android:singleLine=\"true\"\r\n            android:textColor=\"@color/textcolor\"\r\n            android:textSize=\"40px\" />\r\n    </LinearLayout>\r\n\r\n    <LinearLayout\r\n        android:layout_width=\"920px\"\r\n        android:layout_height=\"130px\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:layout_marginTop=\"20px\"\r\n        android:background=\"@drawable/shape_edit_stroke\"\r\n        android:orientation=\"horizontal\" >\r\n\r\n        <ImageView\r\n            android:layout_width=\"57px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginLeft=\"40px\"\r\n            android:src=\"@drawable/login_zaicishurumima\"\r\n            android:text=\"设置密码\" />\r\n\r\n        <View\r\n            android:layout_width=\"0.5px\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_marginLeft=\"40px\"\r\n            android:background=\"@color/line\" />\r\n\r\n        <EditText\r\n            android:id=\"@+id/login_regist_repwd\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"match_parent\"\r\n            android:layout_gravity=\"center_vertical\"\r\n            android:layout_marginLeft=\"13px\"\r\n            android:background=\"@null\"\r\n            android:hint=\"请重新输入一遍密码\"\r\n            android:singleLine=\"true\"\r\n            android:textColor=\"@color/textcolor\"\r\n            android:textSize=\"40px\" />\r\n    </LinearLayout>\r\n\r\n    <TextView\r\n        android:id=\"@+id/login_regist_completeregist\"\r\n        android:layout_width=\"920px\"\r\n        android:layout_height=\"132px\"\r\n        android:layout_gravity=\"center_horizontal\"\r\n        android:layout_marginTop=\"82px\"\r\n        android:background=\"#ff6600\"\r\n        android:clickable=\"true\"\r\n        android:gravity=\"center\"\r\n        android:text=\"完成注册\"\r\n        android:textColor=\"@android:color/white\"\r\n        android:textSize=\"49px\" />\r\n\r\n</LinearLayout>"
  },
  {
    "path": "sample/src/main/res/layout/list_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- 消客的列表 -->\r\n<RelativeLayout\r\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"244px\"\r\n    android:orientation=\"vertical\" >\r\n\r\n    <ImageView\r\n        android:layout_width=\"169px\"\r\n        android:layout_height=\"169px\"\r\n        app:layout_auto_baseheight=\"width\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:layout_marginLeft=\"40px\"\r\n        android:src=\"@drawable/tuijian_touxiang6\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_name\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"262px\"\r\n        android:layout_marginTop=\"60px\"\r\n        android:text=\"刘小新\"\r\n        android:textSize=\"48px\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_people_nums\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"262px\"\r\n        android:layout_marginTop=\"136px\"\r\n        android:text=\"消客:566人\"\r\n        android:textColor=\"#656565\"\r\n        android:textSize=\"40px\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_phone\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"580px\"\r\n        android:layout_marginTop=\"69px\"\r\n        android:text=\"手机:15511223564\"\r\n        android:textColor=\"#656565\"\r\n        android:textSize=\"38px\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_saleprice\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"580px\"\r\n        android:layout_marginTop=\"136px\"\r\n        android:text=\"销售:￥8，653.00\"\r\n        android:textColor=\"#656565\"\r\n        android:textSize=\"38px\" />\r\n\r\n</RelativeLayout>"
  },
  {
    "path": "sample/src/main/res/layout/recyclerview_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- 消客的列表 -->\r\n<RelativeLayout\r\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"244px\"\r\n    android:orientation=\"vertical\" >\r\n\r\n    <ImageView\r\n        android:layout_width=\"169px\"\r\n        android:layout_height=\"169px\"\r\n        app:layout_auto_baseheight=\"width\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:layout_marginLeft=\"40px\"\r\n        android:src=\"@drawable/tuijian_touxiang6\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_name\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"262px\"\r\n        android:layout_marginTop=\"60px\"\r\n        android:text=\"刘小新\"\r\n        android:textSize=\"48px\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_people_nums\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"262px\"\r\n        android:layout_marginTop=\"136px\"\r\n        android:text=\"消客:566人\"\r\n        android:textColor=\"#656565\"\r\n        android:textSize=\"40px\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_phone\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"580px\"\r\n        android:layout_marginTop=\"69px\"\r\n        android:text=\"手机:15511223564\"\r\n        android:textColor=\"#656565\"\r\n        android:textSize=\"38px\" />\r\n\r\n    <TextView\r\n        android:id=\"@+id/xiaoke_saleprice\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginLeft=\"580px\"\r\n        android:layout_marginTop=\"136px\"\r\n        android:text=\"销售:￥8，653.00\"\r\n        android:textColor=\"#656565\"\r\n        android:textSize=\"38px\" />\r\n\r\n</RelativeLayout>"
  },
  {
    "path": "sample/src/main/res/layout/recyclerview_item_grid.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- 消客的列表 -->\r\n<RelativeLayout\r\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\r\n    android:layout_width=\"244px\"\r\n    android:layout_height=\"244px\"\r\n    >\r\n\r\n\r\n</RelativeLayout>"
  },
  {
    "path": "sample/src/main/res/menu/menu_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n      xmlns:tools=\"http://schemas.android.com/tools\"\n      tools:context=\".MainActivity\">\n    <item android:id=\"@+id/action_settings\"\n          android:title=\"@string/action_settings\"\n          android:orderInCategory=\"100\"\n          app:showAsAction=\"never\"/>\n\n      <item\n            android:title=\"@string/action_settings\"\n            android:orderInCategory=\"100\"\n            app:showAsAction=\"never\"/>\n\n\n      <item\n            android:title=\"@string/action_settings\"\n            android:orderInCategory=\"100\"\n            app:showAsAction=\"never\"/>\n</menu>\n"
  },
  {
    "path": "sample/src/main/res/menu/menu_test.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n      xmlns:tools=\"http://schemas.android.com/tools\"\n      tools:context=\"com.zhy.sample.TestActivity\">\n    <item android:id=\"@+id/action_settings\"\n          android:title=\"@string/action_settings\"\n          android:orderInCategory=\"100\"\n          app:showAsAction=\"never\"/>\n</menu>\n"
  },
  {
    "path": "sample/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <declare-styleable name=\"AutoLayout_Layout\">\n        <attr name=\"layout_auto_width\" format=\"integer\"/>\n        <attr name=\"layout_auto_height\" format=\"integer\"/>\n\n        <attr name=\"layout_auto_margin\" format=\"integer\"/>\n        <attr name=\"layout_auto_marginLeft\" format=\"integer\"/>\n        <attr name=\"layout_auto_marginTop\" format=\"integer\"/>\n        <attr name=\"layout_auto_marginRight\" format=\"integer\"/>\n        <attr name=\"layout_auto_marginBottom\" format=\"integer\"/>\n        <attr name=\"layout_auto_marginStart\" format=\"integer\"/>\n        <attr name=\"layout_auto_marginEnd\" format=\"integer\"/>\n\n        <attr name=\"layout_auto_textSize\" format=\"integer\"/>\n\n        <attr name=\"layout_auto_maxWidth\" format=\"integer\"/>\n        <attr name=\"layout_auto_maxHeight\" format=\"integer\"/>\n        <attr name=\"layout_auto_minWidth\" format=\"integer\"/>\n        <attr name=\"layout_auto_minHeight\" format=\"integer\"/>\n\n        <attr name=\"layout_auto_padding\" format=\"integer\"/>\n        <attr name=\"layout_auto_paddingTop\" format=\"integer\"/>\n        <attr name=\"layout_auto_paddingBottom\" format=\"integer\"/>\n        <attr name=\"layout_auto_paddingLeft\" format=\"integer\"/>\n        <attr name=\"layout_auto_paddingRight\" format=\"integer\"/>\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "sample/src/main/res/values/color.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<resources>\r\n\r\n    <color name=\"btn_bg\">#ff6600</color>\r\n    <color name=\"btn_bg_pre\">#c8580d</color>\r\n    <color name=\"edittext_bg\">#d7d7d7</color>\r\n    <color name=\"line\">#c9c9c9</color>\r\n    <color name=\"textcolor\">#c3c3c3</color>\r\n    <color name=\"deep_gray\">#666666</color>\r\n    <color name=\"textredcolor\">#f31216</color>\r\n    <color name=\"activitybg\">#f3f3f3</color>\r\n\r\n</resources>"
  },
  {
    "path": "sample/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n\n    <dimen name=\"px20\">20px</dimen>\n    <dimen name=\"px020\">020px</dimen>\n    <dimen name=\"dp20\">20dp</dimen>\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">sample</string>\n\n    <string name=\"hello_world\">Hello world!</string>\n    <string name=\"action_settings\">Settings</string>\n    <string name=\"title_activity_test\">TestActivity</string>\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"BaseAppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n    </style>\n\n    <style name=\"AppTheme\" parent=\"@style/BaseAppTheme\">\n    </style>\n\n\n    <style name=\"immersion_status\">\n        <item name=\"android:clipToPadding\">true</item>\n        <item name=\"android:fitsSystemWindows\">true</item>\n        <item name=\"android:layout_width\">match_parent</item>\n        <item name=\"android:layout_height\">match_parent</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "sample/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':sample', ':autolayout', ':widgetsample', ':autolayout-widget'\n"
  },
  {
    "path": "widgetsample/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "widgetsample/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        applicationId \"com.zhy.autolayout.test.widgets\"\n        minSdkVersion 10\n        targetSdkVersion 23\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile project(':autolayout')\n    compile project(':autolayout-widget')\n    compile 'com.android.support:design:23.1.1'\n    compile 'com.android.support:support-v4:23.1.1'\n    compile 'com.android.support:appcompat-v7:23.1.1'\n    compile 'com.android.support:gridlayout-v7:23.1.1'\n    compile 'com.android.support:cardview-v7:23.1.1'\n}\n"
  },
  {
    "path": "widgetsample/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "widgetsample/src/androidTest/java/com/zhy/autolayout/test/widgets/ApplicationTest.java",
    "content": "package com.zhy.autolayout.test.widgets;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application>\n{\n    public ApplicationTest()\n    {\n        super(Application.class);\n    }\n}"
  },
  {
    "path": "widgetsample/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.zhy.autolayout.test.widgets\" >\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\" >\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"@string/app_name\" >\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\n        <meta-data\n            android:name=\"design_width\"\n            android:value=\"768\" />\n        <meta-data\n            android:name=\"design_height\"\n            android:value=\"1280\" />\n    </application>\n\n\n\n</manifest>\n"
  },
  {
    "path": "widgetsample/src/main/java/com/zhy/autolayout/test/widgets/MainActivity.java",
    "content": "package com.zhy.autolayout.test.widgets;\n\nimport android.os.Bundle;\nimport android.support.design.widget.TabLayout;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.app.FragmentPagerAdapter;\nimport android.support.v4.view.ViewPager;\nimport android.support.v7.widget.Toolbar;\nimport android.view.Menu;\nimport android.view.MenuItem;\n\nimport com.zhy.autolayout.test.widgets.fragments.SimpleFragment;\nimport com.zhy.autolayout.widget.AutoLayoutWidgetActivity;\n\npublic class MainActivity extends AutoLayoutWidgetActivity {\n    private TabLayout mTabLayout;\n    private ViewPager mViewPager;\n\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n\n        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);\n        toolbar.setTitle(\"标题\");\n        setSupportActionBar(toolbar);\n        mTabLayout = (TabLayout) findViewById(R.id.id_tablayout);\n        mViewPager = (ViewPager) findViewById(R.id.id_viewpager);\n\n        mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {\n            @Override\n            public Fragment getItem(int position) {\n                return new SimpleFragment();\n            }\n\n            @Override\n            public int getCount() {\n                return 2;\n            }\n\n            @Override\n            public CharSequence getPageTitle(int position) {\n                return \"Page \" + position;\n            }\n        });\n\n        mTabLayout.setupWithViewPager(mViewPager);\n\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        // Inflate the menu; this adds items to the action bar if it is present.\n        getMenuInflater().inflate(R.menu.menu_main, menu);\n        return true;\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        // Handle action bar item clicks here. The action bar will\n        // automatically handle clicks on the Home/Up button, so long\n        // as you specify a parent activity in AndroidManifest.xml.\n        int id = item.getItemId();\n\n        //noinspection SimplifiableIfStatement\n        if (id == R.id.action_settings) {\n            return true;\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n}\n"
  },
  {
    "path": "widgetsample/src/main/java/com/zhy/autolayout/test/widgets/fragments/SimpleFragment.java",
    "content": "package com.zhy.autolayout.test.widgets.fragments;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport android.support.v4.app.Fragment;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.zhy.autolayout.test.widgets.R;\n\n/**\n * Created by zhy on 16/3/3.\n */\npublic class SimpleFragment extends Fragment\n{\n    @Nullable\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)\n    {\n        return inflater.inflate(R.layout.fragment_simple, container, false);\n    }\n}\n"
  },
  {
    "path": "widgetsample/src/main/res/layout/activity_main.xml",
    "content": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <com.zhy.autolayout.widget.AutoToolbar\n        android:id=\"@+id/toolbar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"?attr/colorPrimary\"\n        android:fitsSystemWindows=\"true\"\n        android:minHeight=\"?attr/actionBarSize\"\n        app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n        app:subtitleTextAppearance=\"@style/ToolbarSubTitleTextAppearance\"\n        app:theme=\"@style/ToolBarMenuStyle\"\n        app:titleTextAppearance=\"@style/ToolbarTitleTextAppearance\">\n\n    </com.zhy.autolayout.widget.AutoToolbar>\n\n    <android.support.design.widget.TabLayout\n        android:id=\"@+id/id_tablayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"96px\"\n        android:background=\"#1787ff\"\n        app:tabIndicatorColor=\"#ff4a1c\"\n        app:tabSelectedTextColor=\"#ff4a1c\"\n        app:tabTextAppearance=\"@style/MyCustomTabTextAppearance\"\n        app:tabTextColor=\"#ffffff\" />\n\n\n    <android.support.v4.view.ViewPager\n        android:id=\"@+id/id_viewpager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_weight=\"1\" />\n</LinearLayout>\n"
  },
  {
    "path": "widgetsample/src/main/res/layout/fragment_simple.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    >\n\n    <TextView\n        android:id=\"@+id/id_title\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:text=\"Helloworld\"/>\n\n</FrameLayout>"
  },
  {
    "path": "widgetsample/src/main/res/menu/menu_main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n      xmlns:tools=\"http://schemas.android.com/tools\"\n      tools:context=\".MainActivity\">\n    <item android:id=\"@+id/action_settings\"\n          android:title=\"@string/action_settings\"\n          android:orderInCategory=\"100\"\n          app:showAsAction=\"never|ifRoom\"/>\n</menu>\n"
  },
  {
    "path": "widgetsample/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "widgetsample/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">widgetSample</string>\n\n    <string name=\"hello_world\">Hello world!</string>\n    <string name=\"action_settings\">设置</string>\n</resources>\n"
  },
  {
    "path": "widgetsample/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n    </style>\n\n    <style name=\"MyCustomTabTextAppearance\" parent=\"TextAppearance.Design.Tab\">\n        <item name=\"android:textSize\">32px</item>\n    </style>\n    <style name=\"ToolBarMenuStyle\" parent=\"ThemeOverlay.AppCompat.ActionBar\">\n        <item name=\"actionMenuTextColor\">@android:color/darker_gray</item>\n        <item name=\"android:textSize\">50px</item>\n    </style>\n\n    <style name=\"ToolbarTitleTextAppearance\" parent=\"TextAppearance.Widget.AppCompat.Toolbar.Title\">\n        <item name=\"android:textSize\">60px</item>\n    </style>\n\n    <style name=\"ToolbarSubTitleTextAppearance\" parent=\"TextAppearance.Widget.AppCompat.Toolbar.Subtitle\">\n        <item name=\"android:textSize\">40px</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "widgetsample/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  }
]