diff --git a/.gitignore b/.gitignore index 9c4de58..f6cc02c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,40 @@ -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build + /captures + +# Built application files +*.apk +*.ap_ + + + +# Generated files +bin/ +gen/ + +# Gradle files +.gradle/ +/build +/*/build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Eclipse project files +.classpath +.project +.settings/ + +# Intellij project files +*.iml +*.ipr +*.iws +.idea/ + +# System files +.DS_Store \ No newline at end of file diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index a1cdf6f..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -AutoLayout \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 9a8b7e5..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 8a06836..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index dae7a60..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.7 - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index acef87b..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/AutoLayout.iml b/AutoLayout.iml deleted file mode 100644 index 6799bc5..0000000 --- a/AutoLayout.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AutoLayoutDemoForEclipse.zip b/AutoLayoutDemoForEclipse.zip deleted file mode 100644 index 2bc0466..0000000 Binary files a/AutoLayoutDemoForEclipse.zip and /dev/null differ diff --git a/README.md b/README.md index 29af47e..aa40659 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,23 @@ # AndroidAutoLayout -Android屏幕适配方案,直接填写设计图上的像素尺寸即可完成适配。 +[DEPRECATED]Android屏幕适配方案,直接填写设计图上的像素尺寸即可完成适配。 + +>目前没有精力,已停止维护,使用前务必看明白代码,明确该方案可以解决自身问题,有扩展代码能力,否则不建议使用。 非常感谢 : 吃土豆的人 的协作。 + +>推荐使用[AndroidAutoSize](https://github.com/JessYanCoding/AndroidAutoSize) + +AndroidAutoSize目前作者一直在维护,私下也有一些交流,也是 AndroidAutoLayout 3年的使用者,自研了[AndroidAutoSize](https://github.com/JessYanCoding/AndroidAutoSize), 在目前本库已经没有精力维护的情况下,推荐使用;如果使用了本库,迁移成本也非常低,[迁移指南](https://github.com/JessYanCoding/AndroidAutoSize/issues/90)。 + + + ## 效果图 最大幅度解决适配问题,并且最大化方便开发者。 + + so,看下用法: @@ -55,13 +66,13 @@ dependencies { ``` dependencies { - compile 'com.zhy:autolayout:1.3.6' + compile 'com.zhy:autolayout:1.4.5' } ``` * Eclipse -下载[AutoLayoutDemoForEclipse.zip](AutoLayoutDemoForEclipse.zip),导入到eclipse中即可。 +建议使用As,方便版本更新。实在不行,只有复制粘贴源码了。 ## 用法 @@ -206,6 +217,10 @@ public class AutoCardView extends CardView ### ListView、RecyclerView类的Item的适配 +**sample中包含ListView、RecyclerView例子,具体查看sample** + +* 对于ListView + 对于ListView这类控件的item,默认根局部写“px”进行适配是无效的,因为外层非AutoXXXLayout,而是ListView。但是,不用怕,一行代码就可以支持了: ```java @@ -232,6 +247,28 @@ public View getView(int position, View convertView, ViewGroup parent) 注意` AutoUtils.autoSize(convertView);`这行代码的位置即可。demo中也有相关实例。 +* 对于RecyclerView + +```java +public ViewHolder(View itemView) +{ + super(itemView); + AutoUtils.autoSize(itemView); +} + +//... +@Override +public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) +{ + View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, parent, false); + return new ViewHolder(convertView); +} + +``` + +一定要记得`LayoutInflater.from(mContext).inflate`使用三个参数的方法! + + ### 指定设置的值参考宽度或者高度 由于该库的特点,布局文件中宽高上的1px是不相等的,于是如果需要宽高保持一致的情况,布局中使用属性: @@ -253,12 +290,36 @@ public View getView(int position, View convertView, ViewGroup parent) ### TextView的高度问题 -设计稿一般只会标识一个字体的大小,比如你设置textSize="20px",实际上TextView所占据的高度肯定大于20px,字的上下都会有一定的建议,所以一定要灵活去写字体的高度,比如对于text上下的margin可以选择尽可能小一点。或者选择别的约束条件去定位(比如上例,选择了marginBottom) +设计稿一般只会标识一个字体的大小,比如你设置textSize="20px",实际上TextView所占据的高度肯定大于20px,字的上下都会有一定的间隙,所以一定要灵活去写字体的高度,比如对于text上下的margin可以选择尽可能小一点。或者选择别的约束条件去定位(比如上例,选择了marginBottom) + + +## 常见问题 + +###(1)导入后出现`org/gradle/api/publication/maven/internal/DefaultMavenFactory` + +最简单的方式,通过`compile 'com.zhy:autolayout:x.x.x'`进行依赖使用,如果一定要以module引用,参考该issue[#74](https://github.com/hongyangAndroid/AndroidAutoLayout/issues/74) + +###(2)RadioGroup,Toolbar等控件中的子View无法完成适配 + +这个其实上文已经提到过了,需要自己扩展。不过这个很多使用者贡献了他们的扩展类可以直接使用, +参考[autolayout-widget](https://github.com/hongyangAndroid/AndroidAutoLayout/tree/master/widgetsample), +如果没有发现你需要的容器类,那么你就真的需要自行扩展了,当然如果你完成了扩展,可以给我发个PR,或者让我知道,我可以加入到 +`autolayout-widget`中方便他人,ps:需要用到哪个copy就好了,不要直接引用`autolayout-widget`,因为其引用了大量的库,可能很多 +库你是用不到的。 + +###(3)java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. + +这个问题是因为默认AutoLayoutActivity会继承自AppCompatActivity,所以默认需要设置 +Theme.AppCompat的theme; + +如果你使用的依旧是FragmentActivity等,且不考虑使用AppCompatActivity, +你可以选择自己编写一个`MyAutoLayoutActivity extends 目前你使用的Activity基类`,例如 +`MyAutoLayoutActivity extends FragmentActivity`,然后将该库中AutoLayoutActivity中的逻辑 +拷贝进去即可,以后你就继承你的`MyAutoLayoutActivity`就好了。 + +ps:还是建议尽快更新SDK版本使用`AppCompatActivity`. -##TODO -* 增加单个Activity横屏布局的支持(设计图必须是横屏的) -* 完善demo(复杂的,简单的,ListView的各种) ## 其他信息 diff --git a/app/app.iml b/app/app.iml deleted file mode 100644 index 1a2c739..0000000 --- a/app/app.iml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/autolayout-widget/.gitignore b/autolayout-widget/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/autolayout-widget/.gitignore @@ -0,0 +1 @@ +/build diff --git a/autolayout-widget/build.gradle b/autolayout-widget/build.gradle new file mode 100644 index 0000000..12479e2 --- /dev/null +++ b/autolayout-widget/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + minSdkVersion 10 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.android.support:appcompat-v7:23.1.0' + compile project(':autolayout') + compile 'com.android.support:support-v4:23.1.0' + compile 'com.android.support:design:23.1.1' + compile 'com.android.support:gridlayout-v7:23.1.0' + compile 'com.android.support:cardview-v7:23.1.0' +} diff --git a/autolayout-widget/proguard-rules.pro b/autolayout-widget/proguard-rules.pro new file mode 100644 index 0000000..1c6c033 --- /dev/null +++ b/autolayout-widget/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/zhy/android/sdk/android-sdk-macosx/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/autolayout-widget/src/androidTest/java/com/zhy/autolayout/widget/ApplicationTest.java b/autolayout-widget/src/androidTest/java/com/zhy/autolayout/widget/ApplicationTest.java new file mode 100644 index 0000000..31ab05b --- /dev/null +++ b/autolayout-widget/src/androidTest/java/com/zhy/autolayout/widget/ApplicationTest.java @@ -0,0 +1,15 @@ +package com.zhy.autolayout.widget; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase +{ + public ApplicationTest() + { + super(Application.class); + } +} \ No newline at end of file diff --git a/autolayout-widget/src/main/AndroidManifest.xml b/autolayout-widget/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cb3eb3f --- /dev/null +++ b/autolayout-widget/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoActionMenuItemView.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoActionMenuItemView.java new file mode 100644 index 0000000..a700a73 --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoActionMenuItemView.java @@ -0,0 +1,64 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.content.res.TypedArray; + +import android.support.v7.view.menu.ActionMenuItemView; +import android.util.AttributeSet; +import android.util.TypedValue; + + +import com.zhy.autolayout.utils.AutoUtils; +import com.zhy.autolayout.utils.DimenUtils; + +/** + * Created by hupei on 2016/3/7 14:44. + */ +public class AutoActionMenuItemView extends ActionMenuItemView { + private static final int NO_VALID = -1; + private int mMenuTextSize; + + public AutoActionMenuItemView(Context context) { + this(context, null); + } + + public AutoActionMenuItemView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public AutoActionMenuItemView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Theme, + defStyle, R.style.ThemeOverlay_AppCompat); + int menuTextAppearance = a.getResourceId(R.styleable.Theme_actionBarTheme, + R.style.ThemeOverlay_AppCompat_ActionBar); + mMenuTextSize = loadTextSizeFromTextAppearance(menuTextAppearance); + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (!this.isInEditMode()) { + setUpTitleTextSize(); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + private int loadTextSizeFromTextAppearance(int textAppearanceResId) { + TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId, + R.styleable.TextAppearance); + try { + if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize))) + return NO_VALID; + return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID); + } finally { + a.recycle(); + } + } + + private void setUpTitleTextSize() { + if (mMenuTextSize == -1) return; + int autoTextSize = AutoUtils.getPercentHeightSize(mMenuTextSize); + setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize); + } +} diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoCardView.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoCardView.java new file mode 100644 index 0000000..9b1dcba --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoCardView.java @@ -0,0 +1,49 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.support.v7.widget.CardView; +import android.util.AttributeSet; + +import com.zhy.autolayout.AutoFrameLayout; +import com.zhy.autolayout.utils.AutoLayoutHelper; + +/** + * Created by zhy on 15/12/8. + */ +public class AutoCardView extends CardView +{ + private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this); + + public AutoCardView(Context context) + { + super(context); + } + + public AutoCardView(Context context, AttributeSet attrs) + { + super(context, attrs); + } + + public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr) + { + super(context, attrs, defStyleAttr); + } + + @Override + public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) + { + return new AutoFrameLayout.LayoutParams(getContext(), attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + if (!isInEditMode()) + { + mHelper.adjustChildren(); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + +} diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoLayoutWidgetActivity.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoLayoutWidgetActivity.java new file mode 100644 index 0000000..b2c73e6 --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoLayoutWidgetActivity.java @@ -0,0 +1,31 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; + +import com.zhy.autolayout.AutoLayoutActivity; + +/** + * Created by hupei on 2016/3/7 16:44. + */ +public class AutoLayoutWidgetActivity extends AutoLayoutActivity { + + private static final String ACTION_MENU_ITEM_VIEW = "android.support.v7.view.menu.ActionMenuItemView"; + private static final String TAB_LAYOUT = "android.support.design.widget.TabLayout"; + + @Override + public View onCreateView(String name, Context context, AttributeSet attrs) { + View view = null; + + if (name.equals(ACTION_MENU_ITEM_VIEW)) { + view = new AutoActionMenuItemView(context, attrs); + } + if (name.equals(TAB_LAYOUT)) { + view = new AutoTabLayout(context, attrs); + } + + if (view != null) return view; + return super.onCreateView(name, context, attrs); + } +} \ No newline at end of file diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoRadioGroup.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoRadioGroup.java new file mode 100644 index 0000000..2170594 --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoRadioGroup.java @@ -0,0 +1,83 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.RadioGroup; + +import com.zhy.autolayout.AutoLayoutInfo; +import com.zhy.autolayout.utils.AutoLayoutHelper; + +/** + * Created by hupei on 2016/2/29 9:59. + */ +public class AutoRadioGroup extends RadioGroup +{ + private AutoLayoutHelper mHelper = new AutoLayoutHelper(this); + + public AutoRadioGroup(Context context) + { + super(context); + } + + public AutoRadioGroup(Context context, AttributeSet attrs) + { + super(context, attrs); + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + if (!isInEditMode()) + mHelper.adjustChildren(); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) + { + super.onLayout(changed, l, t, r, b); + } + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) + { + return new LayoutParams(getContext(), attrs); + } + + public static class LayoutParams extends RadioGroup.LayoutParams + implements AutoLayoutHelper.AutoLayoutParams + { + private AutoLayoutInfo mAutoLayoutInfo; + + public LayoutParams(Context c, AttributeSet attrs) + { + super(c, attrs); + mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs); + } + + @Override + public AutoLayoutInfo getAutoLayoutInfo() + { + return mAutoLayoutInfo; + } + + + public LayoutParams(int width, int height) + { + super(width, height); + } + + public LayoutParams(ViewGroup.LayoutParams source) + { + super(source); + } + + public LayoutParams(MarginLayoutParams source) + { + super(source); + } + + } +} diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTabLayout.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTabLayout.java new file mode 100644 index 0000000..6211c44 --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTabLayout.java @@ -0,0 +1,112 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.support.design.widget.TabLayout; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.zhy.autolayout.utils.AutoUtils; +import com.zhy.autolayout.utils.DimenUtils; + +/** + * Created by zhy on 16/3/3. + */ +public class AutoTabLayout extends TabLayout +{ + private static final int NO_VALID = -1; + private int mTextSize; + private boolean mTextSizeBaseWidth = false; + + public AutoTabLayout(Context context) + { + this(context, null); + } + + public AutoTabLayout(Context context, AttributeSet attrs) + { + this(context, attrs, 0); + } + + public AutoTabLayout(Context context, AttributeSet attrs, int defStyleAttr) + { + super(context, attrs, defStyleAttr); + + initTextSizeBaseWidth(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabLayout, + defStyleAttr, R.style.Widget_Design_TabLayout); + int tabTextAppearance = a.getResourceId(R.styleable.TabLayout_tabTextAppearance, + R.style.TextAppearance_Design_Tab); + + mTextSize = loadTextSizeFromTextAppearance(tabTextAppearance); + a.recycle(); + } + + private void initTextSizeBaseWidth(Context context, AttributeSet attrs) + { + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoTabLayout); + mTextSizeBaseWidth = a.getBoolean(R.styleable.AutoTabLayout_auto_textSize_base_width, false); + a.recycle(); + } + + private int loadTextSizeFromTextAppearance(int textAppearanceResId) + { + TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId, + R.styleable.TextAppearance); + + try + { + if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize))) + return NO_VALID; + return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID); + } finally + { + a.recycle(); + } + } + + @Override + public void addTab(Tab tab, int position, boolean setSelected) + { + super.addTab(tab, position, setSelected); + setUpTabTextSize(tab); + } + + @Override + public void addTab(Tab tab, boolean setSelected) + { + super.addTab(tab, setSelected); + setUpTabTextSize(tab); + } + + private void setUpTabTextSize(Tab tab) + { + if (mTextSize == NO_VALID || tab.getCustomView() != null) return; + + ViewGroup tabGroup = (ViewGroup) getChildAt(0); + ViewGroup tabContainer = (ViewGroup) tabGroup.getChildAt(tab.getPosition()); + TextView textView = (TextView) tabContainer.getChildAt(1); + + + if (AutoUtils.autoed(textView)) + { + return; + } + int autoTextSize = 0 ; + if (mTextSizeBaseWidth) + { + autoTextSize = AutoUtils.getPercentWidthSize(mTextSize); + } else + { + autoTextSize = AutoUtils.getPercentHeightSize(mTextSize); + } + + + textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize); + } + + +} diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableLayout.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableLayout.java new file mode 100644 index 0000000..adc584a --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableLayout.java @@ -0,0 +1,86 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.TableLayout; + +import com.zhy.autolayout.AutoLayoutInfo; +import com.zhy.autolayout.utils.AutoLayoutHelper; + +/** + * Created by hupei on 2016/2/29 9:59. + */ +public class AutoTableLayout extends TableLayout +{ + private AutoLayoutHelper mHelper = new AutoLayoutHelper(this); + + public AutoTableLayout(Context context) + { + super(context); + } + + public AutoTableLayout(Context context, AttributeSet attrs) + { + super(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + if (!isInEditMode()) + mHelper.adjustChildren(); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) + { + super.onLayout(changed, l, t, r, b); + } + + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) + { + return new LayoutParams(getContext(), attrs); + } + + + public static class LayoutParams extends TableLayout.LayoutParams + implements AutoLayoutHelper.AutoLayoutParams + { + private AutoLayoutInfo mAutoLayoutInfo; + + public LayoutParams(Context c, AttributeSet attrs) + { + super(c, attrs); + mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs); + } + + @Override + public AutoLayoutInfo getAutoLayoutInfo() + { + return mAutoLayoutInfo; + } + + + public LayoutParams(int width, int height) + { + super(width, height); + } + + + public LayoutParams(ViewGroup.LayoutParams source) + { + super(source); + } + + public LayoutParams(MarginLayoutParams source) + { + super(source); + } + + } +} diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableRow.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableRow.java new file mode 100644 index 0000000..553d3ad --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoTableRow.java @@ -0,0 +1,87 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.ViewGroup; +import android.widget.TableRow; + +import com.zhy.autolayout.AutoLayoutInfo; +import com.zhy.autolayout.utils.AutoLayoutHelper; + +/** + * Created by hupei on 2016/2/29 9:59. + */ +public class AutoTableRow extends TableRow +{ + private AutoLayoutHelper mHelper = new AutoLayoutHelper(this); + + public AutoTableRow(Context context) + { + super(context); + } + + public AutoTableRow(Context context, AttributeSet attrs) + { + super(context, attrs); + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + if (!isInEditMode()) + mHelper.adjustChildren(); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) + { + super.onLayout(changed, l, t, r, b); + } + + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) + { + return new LayoutParams(getContext(), attrs); + } + + + public static class LayoutParams extends TableRow.LayoutParams + implements AutoLayoutHelper.AutoLayoutParams + { + private AutoLayoutInfo mAutoLayoutInfo; + + public LayoutParams(Context c, AttributeSet attrs) + { + super(c, attrs); + mAutoLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs); + } + + @Override + public AutoLayoutInfo getAutoLayoutInfo() + { + return mAutoLayoutInfo; + } + + + public LayoutParams(int width, int height) + { + super(width, height); + } + + + public LayoutParams(ViewGroup.LayoutParams source) + { + super(source); + } + + public LayoutParams(MarginLayoutParams source) + { + super(source); + } + + } +} diff --git a/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoToolbar.java b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoToolbar.java new file mode 100644 index 0000000..90f4a9e --- /dev/null +++ b/autolayout-widget/src/main/java/com/zhy/autolayout/widget/AutoToolbar.java @@ -0,0 +1,143 @@ +package com.zhy.autolayout.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.support.v7.widget.Toolbar; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.widget.TextView; + +import com.zhy.autolayout.AutoLayoutInfo; +import com.zhy.autolayout.utils.AutoLayoutHelper; +import com.zhy.autolayout.utils.AutoUtils; +import com.zhy.autolayout.utils.DimenUtils; + +import java.lang.reflect.Field; + +/** + * Created by hupei on 2015/12/28 20:33. + */ +public class AutoToolbar extends Toolbar { + private static final int NO_VALID = -1; + private int mTextSize; + private int mSubTextSize; + private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this); + + public AutoToolbar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Toolbar, + defStyleAttr, R.style.Widget_AppCompat_Toolbar); + + int titleTextAppearance = a.getResourceId(R.styleable.Toolbar_titleTextAppearance, + R.style.TextAppearance_Widget_AppCompat_Toolbar_Title); + + int subtitleTextAppearance = a.getResourceId(R.styleable.Toolbar_subtitleTextAppearance, + R.style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle); + + mTextSize = loadTextSizeFromTextAppearance(titleTextAppearance); + mSubTextSize = loadTextSizeFromTextAppearance(subtitleTextAppearance); + + TypedArray menuA = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Theme, + defStyleAttr, R.style.ThemeOverlay_AppCompat); + int menuTextAppearance = menuA.getResourceId(R.styleable.Theme_actionBarTheme, + R.style.ThemeOverlay_AppCompat_ActionBar); + int menuTextSize = loadTextSizeFromTextAppearance(menuTextAppearance); + + //防止 menu 定义 textSize,而 Toolbar 无定义 textSize 时,title 的 textSize 随 menu 变化 + if (mTextSize == NO_VALID) mTextSize = menuTextSize; + if (mSubTextSize == NO_VALID) mSubTextSize = menuTextSize; + + a.recycle(); + menuA.recycle(); + } + + public AutoToolbar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public AutoToolbar(Context context) { + this(context, null); + } + + private int loadTextSizeFromTextAppearance(int textAppearanceResId) { + TypedArray a = getContext().obtainStyledAttributes(textAppearanceResId, + R.styleable.TextAppearance); + try { + if (!DimenUtils.isPxVal(a.peekValue(R.styleable.TextAppearance_android_textSize))) + return NO_VALID; + return a.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, NO_VALID); + } finally { + a.recycle(); + } + } + + private void setUpTitleTextSize() { + CharSequence title = getTitle(); + if (!TextUtils.isEmpty(title) && mTextSize != NO_VALID) + setUpTitleTextSize("mTitleTextView", mTextSize); + CharSequence subtitle = getSubtitle(); + if (!TextUtils.isEmpty(subtitle) && mSubTextSize != NO_VALID) + setUpTitleTextSize("mSubtitleTextView", mSubTextSize); + } + + private void setUpTitleTextSize(String name, int val) { + try { + //反射 Toolbar 的 TextView + Field f = getClass().getSuperclass().getDeclaredField(name); + f.setAccessible(true); + TextView textView = (TextView) f.get(this); + if (textView != null) { + int autoTextSize = AutoUtils.getPercentHeightSize(val); + textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, autoTextSize); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (!this.isInEditMode()) { + setUpTitleTextSize(); + this.mHelper.adjustChildren(); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + } + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) { + return new LayoutParams(this.getContext(), attrs); + } + + public static class LayoutParams extends Toolbar.LayoutParams implements AutoLayoutHelper.AutoLayoutParams { + private AutoLayoutInfo mDimenLayoutInfo; + + public LayoutParams(Context c, AttributeSet attrs) { + super(c, attrs); + this.mDimenLayoutInfo = AutoLayoutHelper.getAutoLayoutInfo(c, attrs); + } + + @Override + public AutoLayoutInfo getAutoLayoutInfo() { + return this.mDimenLayoutInfo; + } + + public LayoutParams(int width, int height) { + super(width, height); + } + + public LayoutParams(android.view.ViewGroup.LayoutParams source) { + super(source); + } + + public LayoutParams(MarginLayoutParams source) { + super(source); + } + } +} diff --git a/autolayout-widget/src/main/res/values/attrs.xml b/autolayout-widget/src/main/res/values/attrs.xml new file mode 100644 index 0000000..c0ece0c --- /dev/null +++ b/autolayout-widget/src/main/res/values/attrs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/autolayout-widget/src/main/res/values/strings.xml b/autolayout-widget/src/main/res/values/strings.xml new file mode 100644 index 0000000..c2c541a --- /dev/null +++ b/autolayout-widget/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + autolayout-widget + diff --git a/autolayout/autolayout.iml b/autolayout/autolayout.iml deleted file mode 100644 index 967e964..0000000 --- a/autolayout/autolayout.iml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/autolayout/build.gradle b/autolayout/build.gradle index 2fd9d21..d02e622 100644 --- a/autolayout/build.gradle +++ b/autolayout/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' -version = "1.3.6" +version = "1.4.5" android { compileSdkVersion 23 diff --git a/autolayout/src/main/AndroidManifest.xml b/autolayout/src/main/AndroidManifest.xml index 02c4172..4fc9a81 100644 --- a/autolayout/src/main/AndroidManifest.xml +++ b/autolayout/src/main/AndroidManifest.xml @@ -1,10 +1,4 @@ - + - - - diff --git a/autolayout/src/main/java/com/zhy/autolayout/AutoFrameLayout.java b/autolayout/src/main/java/com/zhy/autolayout/AutoFrameLayout.java index 37ed323..595d933 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/AutoFrameLayout.java +++ b/autolayout/src/main/java/com/zhy/autolayout/AutoFrameLayout.java @@ -16,12 +16,12 @@ package com.zhy.autolayout; +import android.annotation.TargetApi; import android.content.Context; +import android.os.Build; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.FrameLayout; - -import com.zhy.autolayout.config.AutoLayoutConifg; import com.zhy.autolayout.utils.AutoLayoutHelper; public class AutoFrameLayout extends FrameLayout @@ -43,6 +43,11 @@ public AutoFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) super(context, attrs, defStyleAttr); } + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public AutoFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { diff --git a/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java b/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java index fef6236..ebe2a2a 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java +++ b/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java @@ -1,8 +1,26 @@ package com.zhy.autolayout; import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import com.zhy.autolayout.attr.Attrs; import com.zhy.autolayout.attr.AutoAttr; +import com.zhy.autolayout.attr.HeightAttr; +import com.zhy.autolayout.attr.MarginBottomAttr; +import com.zhy.autolayout.attr.MarginLeftAttr; +import com.zhy.autolayout.attr.MarginRightAttr; +import com.zhy.autolayout.attr.MarginTopAttr; +import com.zhy.autolayout.attr.MaxHeightAttr; +import com.zhy.autolayout.attr.MaxWidthAttr; +import com.zhy.autolayout.attr.MinHeightAttr; +import com.zhy.autolayout.attr.MinWidthAttr; +import com.zhy.autolayout.attr.PaddingBottomAttr; +import com.zhy.autolayout.attr.PaddingLeftAttr; +import com.zhy.autolayout.attr.PaddingRightAttr; +import com.zhy.autolayout.attr.PaddingTopAttr; +import com.zhy.autolayout.attr.TextSizeAttr; +import com.zhy.autolayout.attr.WidthAttr; import java.util.ArrayList; import java.util.List; @@ -10,6 +28,7 @@ public class AutoLayoutInfo { private List autoAttrs = new ArrayList<>(); + public void addAttr(AutoAttr autoAttr) { autoAttrs.add(autoAttr); @@ -24,6 +43,108 @@ public void fillAttrs(View view) } } + + public static AutoLayoutInfo getAttrFromView(View view, int attrs, int base) + { + ViewGroup.LayoutParams params = view.getLayoutParams(); + if (params == null) return null; + AutoLayoutInfo autoLayoutInfo = new AutoLayoutInfo(); + + // width & height + if ((attrs & Attrs.WIDTH) != 0 && params.width > 0) + { + autoLayoutInfo.addAttr(WidthAttr.generate(params.width, base)); + } + + if ((attrs & Attrs.HEIGHT) != 0 && params.height > 0) + { + autoLayoutInfo.addAttr(HeightAttr.generate(params.height, base)); + } + + //margin + if (params instanceof ViewGroup.MarginLayoutParams) + { + if ((attrs & Attrs.MARGIN) != 0) + { + autoLayoutInfo.addAttr(MarginLeftAttr.generate(((ViewGroup.MarginLayoutParams) params).leftMargin, base)); + autoLayoutInfo.addAttr(MarginTopAttr.generate(((ViewGroup.MarginLayoutParams) params).topMargin, base)); + autoLayoutInfo.addAttr(MarginRightAttr.generate(((ViewGroup.MarginLayoutParams) params).rightMargin, base)); + autoLayoutInfo.addAttr(MarginBottomAttr.generate(((ViewGroup.MarginLayoutParams) params).bottomMargin, base)); + } + if ((attrs & Attrs.MARGIN_LEFT) != 0) + { + autoLayoutInfo.addAttr(MarginLeftAttr.generate(((ViewGroup.MarginLayoutParams) params).leftMargin, base)); + } + if ((attrs & Attrs.MARGIN_TOP) != 0) + { + autoLayoutInfo.addAttr(MarginTopAttr.generate(((ViewGroup.MarginLayoutParams) params).topMargin, base)); + } + if ((attrs & Attrs.MARGIN_RIGHT) != 0) + { + autoLayoutInfo.addAttr(MarginRightAttr.generate(((ViewGroup.MarginLayoutParams) params).rightMargin, base)); + } + if ((attrs & Attrs.MARGIN_BOTTOM) != 0) + { + autoLayoutInfo.addAttr(MarginBottomAttr.generate(((ViewGroup.MarginLayoutParams) params).bottomMargin, base)); + } + } + + //padding + if ((attrs & Attrs.PADDING) != 0) + { + autoLayoutInfo.addAttr(PaddingLeftAttr.generate(view.getPaddingLeft(), base)); + autoLayoutInfo.addAttr(PaddingTopAttr.generate(view.getPaddingTop(), base)); + autoLayoutInfo.addAttr(PaddingRightAttr.generate(view.getPaddingRight(), base)); + autoLayoutInfo.addAttr(PaddingBottomAttr.generate(view.getPaddingBottom(), base)); + } + if ((attrs & Attrs.PADDING_LEFT) != 0) + { + autoLayoutInfo.addAttr(MarginLeftAttr.generate(view.getPaddingLeft(), base)); + } + if ((attrs & Attrs.PADDING_TOP) != 0) + { + autoLayoutInfo.addAttr(MarginTopAttr.generate(view.getPaddingTop(), base)); + } + if ((attrs & Attrs.PADDING_RIGHT) != 0) + { + autoLayoutInfo.addAttr(MarginRightAttr.generate(view.getPaddingRight(), base)); + } + if ((attrs & Attrs.PADDING_BOTTOM) != 0) + { + autoLayoutInfo.addAttr(MarginBottomAttr.generate(view.getPaddingBottom(), base)); + } + + //minWidth ,maxWidth , minHeight , maxHeight + if ((attrs & Attrs.MIN_WIDTH) != 0) + { + autoLayoutInfo.addAttr(MinWidthAttr.generate(MinWidthAttr.getMinWidth(view), base)); + } + if ((attrs & Attrs.MAX_WIDTH) != 0) + { + autoLayoutInfo.addAttr(MaxWidthAttr.generate(MaxWidthAttr.getMaxWidth(view), base)); + } + if ((attrs & Attrs.MIN_HEIGHT) != 0) + { + autoLayoutInfo.addAttr(MinHeightAttr.generate(MinHeightAttr.getMinHeight(view), base)); + } + if ((attrs & Attrs.MAX_HEIGHT) != 0) + { + autoLayoutInfo.addAttr(MaxHeightAttr.generate(MaxHeightAttr.getMaxHeight(view), base)); + } + + //textsize + + if (view instanceof TextView) + { + if ((attrs & Attrs.TEXTSIZE) != 0) + { + autoLayoutInfo.addAttr(TextSizeAttr.generate((int) ((TextView) view).getTextSize(), base)); + } + } + return autoLayoutInfo; + } + + @Override public String toString() { diff --git a/autolayout/src/main/java/com/zhy/autolayout/AutoLinearLayout.java b/autolayout/src/main/java/com/zhy/autolayout/AutoLinearLayout.java index 2cb61e8..f0f93d6 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/AutoLinearLayout.java +++ b/autolayout/src/main/java/com/zhy/autolayout/AutoLinearLayout.java @@ -1,6 +1,8 @@ package com.zhy.autolayout; +import android.annotation.TargetApi; import android.content.Context; +import android.os.Build; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -15,11 +17,23 @@ public class AutoLinearLayout extends LinearLayout private AutoLayoutHelper mHelper = new AutoLayoutHelper(this); - public AutoLinearLayout(Context context, AttributeSet attrs) - { + public AutoLinearLayout(Context context) { + super(context); + } + + public AutoLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public AutoLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public AutoLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) diff --git a/autolayout/src/main/java/com/zhy/autolayout/AutoRelativeLayout.java b/autolayout/src/main/java/com/zhy/autolayout/AutoRelativeLayout.java index 9e34dc0..c107e57 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/AutoRelativeLayout.java +++ b/autolayout/src/main/java/com/zhy/autolayout/AutoRelativeLayout.java @@ -16,7 +16,9 @@ package com.zhy.autolayout; +import android.annotation.TargetApi; import android.content.Context; +import android.os.Build; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.RelativeLayout; @@ -42,6 +44,11 @@ public AutoRelativeLayout(Context context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle); } + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + public AutoRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/AutoAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/AutoAttr.java index 5f79345..0f1259f 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/AutoAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/AutoAttr.java @@ -11,6 +11,10 @@ */ public abstract class AutoAttr { + public static final int BASE_WIDTH = 1; + public static final int BASE_HEIGHT = 2; + public static final int BASE_DEFAULT = 3; + protected int pxVal; protected int baseWidth; protected int baseHeight; @@ -72,7 +76,8 @@ public void apply(View view) } } - val = Math.max(val, 1);//for very thin divider + if (val > 0) + val = Math.max(val, 1);//for very thin divider execute(view, val); } @@ -108,6 +113,7 @@ protected boolean contains(int baseVal, int flag) protected abstract void execute(View view, int val); + @Override public String toString() { diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/HeightAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/HeightAttr.java index 3f3149d..c754c90 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/HeightAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/HeightAttr.java @@ -31,4 +31,24 @@ protected void execute(View view, int val) ViewGroup.LayoutParams lp = view.getLayoutParams(); lp.height = val; } + + public static HeightAttr generate(int val, int baseFlag) + { + HeightAttr heightAttr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + heightAttr = new HeightAttr(val, Attrs.HEIGHT, 0); + break; + case AutoAttr.BASE_HEIGHT: + heightAttr = new HeightAttr(val, 0, Attrs.HEIGHT); + break; + case AutoAttr.BASE_DEFAULT: + heightAttr = new HeightAttr(val, 0, 0); + break; + } + return heightAttr; + } + + } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginAttr.java index 82377ee..8769fbe 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginAttr.java @@ -47,6 +47,6 @@ protected void execute(View view, int val) { ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); lp.leftMargin = lp.rightMargin = lp.topMargin = lp.bottomMargin = val; - } + } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginBottomAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginBottomAttr.java index 9a0bea2..7d78272 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginBottomAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginBottomAttr.java @@ -35,4 +35,22 @@ protected void execute(View view, int val) ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); lp.bottomMargin = val; } + + public static MarginBottomAttr generate(int val, int baseFlag) + { + MarginBottomAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MarginBottomAttr(val, Attrs.MARGIN_BOTTOM, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MarginBottomAttr(val, 0, Attrs.MARGIN_BOTTOM); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MarginBottomAttr(val, 0, 0); + break; + } + return attr; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginLeftAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginLeftAttr.java index 8f3d58a..4bc5feb 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginLeftAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginLeftAttr.java @@ -28,11 +28,29 @@ protected boolean defaultBaseWidth() @Override protected void execute(View view, int val) { - if(!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) + if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) { - return ; + return; } ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); lp.leftMargin = val; } + + public static MarginLeftAttr generate(int val, int baseFlag) + { + MarginLeftAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MarginLeftAttr(val, Attrs.MARGIN_LEFT, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MarginLeftAttr(val, 0, Attrs.MARGIN_LEFT); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MarginLeftAttr(val, 0, 0); + break; + } + return attr; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginRightAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginRightAttr.java index a04554a..4f80198 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginRightAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginRightAttr.java @@ -28,11 +28,30 @@ protected boolean defaultBaseWidth() @Override protected void execute(View view, int val) { - if(!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) + if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) { - return ; + return; } ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); lp.rightMargin = val; } + + + public static MarginRightAttr generate(int val, int baseFlag) + { + MarginRightAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MarginRightAttr(val, Attrs.MARGIN_RIGHT, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MarginRightAttr(val, 0, Attrs.MARGIN_RIGHT); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MarginRightAttr(val, 0, 0); + break; + } + return attr; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java index 30ca451..d0821b5 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java @@ -28,11 +28,31 @@ protected boolean defaultBaseWidth() @Override protected void execute(View view, int val) { - if(!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) + if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) { - return ; + return; } ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); lp.topMargin = val; + + } + + + public static MarginTopAttr generate(int val, int baseFlag) + { + MarginTopAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MarginTopAttr(val, Attrs.MARGIN_TOP, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MarginTopAttr(val, 0, Attrs.MARGIN_TOP); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MarginTopAttr(val, 0, 0); + break; + } + return attr; } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MaxHeightAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MaxHeightAttr.java index 773c9e1..9af66af 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MaxHeightAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MaxHeightAttr.java @@ -37,4 +37,34 @@ protected void execute(View view, int val) { } } + + public static MaxHeightAttr generate(int val, int baseFlag) + { + MaxHeightAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MaxHeightAttr(val, Attrs.MAX_HEIGHT, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MaxHeightAttr(val, 0, Attrs.MAX_HEIGHT); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MaxHeightAttr(val, 0, 0); + break; + } + return attr; + } + + public static int getMaxHeight(View view) + { + try + { + Method setMaxWidthMethod = view.getClass().getMethod("getMaxHeight"); + return (int) setMaxWidthMethod.invoke(view); + } catch (Exception ignore) + { + } + return 0; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MaxWidthAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MaxWidthAttr.java index 6065bc3..51a4a95 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MaxWidthAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MaxWidthAttr.java @@ -37,4 +37,34 @@ protected void execute(View view, int val) { } } + + public static MaxWidthAttr generate(int val, int baseFlag) + { + MaxWidthAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MaxWidthAttr(val, Attrs.MAX_WIDTH, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MaxWidthAttr(val, 0, Attrs.MAX_WIDTH); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MaxWidthAttr(val, 0, 0); + break; + } + return attr; + } + + public static int getMaxWidth(View view) + { + try + { + Method setMaxWidthMethod = view.getClass().getMethod("getMaxWidth"); + return (int) setMaxWidthMethod.invoke(view); + } catch (Exception ignore) + { + } + return 0; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MinHeightAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MinHeightAttr.java index 0b66dde..4b271bb 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MinHeightAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MinHeightAttr.java @@ -1,8 +1,9 @@ package com.zhy.autolayout.attr; +import android.os.Build; import android.view.View; -import java.lang.reflect.Method; +import java.lang.reflect.Field; /** * Created by zhy on 15/12/24. @@ -31,10 +32,50 @@ protected void execute(View view, int val) { try { - Method setMaxWidthMethod = view.getClass().getMethod("setMinHeight", int.class); - setMaxWidthMethod.invoke(view, val); + view.setMinimumHeight(val); +// Method setMaxWidthMethod = view.getClass().getMethod("setMinHeight", int.class); +// setMaxWidthMethod.invoke(view, val); } catch (Exception ignore) { } } + + public static MinHeightAttr generate(int val, int baseFlag) + { + MinHeightAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MinHeightAttr(val, Attrs.MIN_HEIGHT, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MinHeightAttr(val, 0, Attrs.MIN_HEIGHT); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MinHeightAttr(val, 0, 0); + break; + } + return attr; + } + + public static int getMinHeight(View view) + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) + { + return view.getMinimumHeight(); + } else + { + try + { + Field minHeight = view.getClass().getField("mMinHeight"); + minHeight.setAccessible(true); + return (int) minHeight.get(view); + } catch (Exception e) + { + } + } + + return 0; + } + } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/MinWidthAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/MinWidthAttr.java index 4e11824..438ef59 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MinWidthAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MinWidthAttr.java @@ -1,8 +1,9 @@ package com.zhy.autolayout.attr; +import android.os.Build; import android.view.View; -import java.lang.reflect.Method; +import java.lang.reflect.Field; /** * Created by zhy on 15/12/24. @@ -31,10 +32,46 @@ protected void execute(View view, int val) { try { - Method setMaxWidthMethod = view.getClass().getMethod("setMinWidth", int.class); - setMaxWidthMethod.invoke(view, val); +// Method setMaxWidthMethod = view.getClass().getMethod("setMinWidth", int.class); +// setMaxWidthMethod.invoke(view, val); } catch (Exception ignore) { } + + view.setMinimumWidth(val); + } + + public static int getMinWidth(View view) + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) + return view.getMinimumWidth(); + try + { + Field minWidth = view.getClass().getField("mMinWidth"); + minWidth.setAccessible(true); + return (int) minWidth.get(view); + } catch (Exception ignore) + { + } + return 0; + } + + + public static MinWidthAttr generate(int val, int baseFlag) + { + MinWidthAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new MinWidthAttr(val, Attrs.MIN_WIDTH, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new MinWidthAttr(val, 0, Attrs.MIN_WIDTH); + break; + case AutoAttr.BASE_DEFAULT: + attr = new MinWidthAttr(val, 0, 0); + break; + } + return attr; } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingAttr.java index 81ad869..b0869af 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingAttr.java @@ -43,4 +43,7 @@ protected void execute(View view, int val) { view.setPadding(val, val, val, val); } + + + } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingBottomAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingBottomAttr.java index 7ca1eb9..cbb4af9 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingBottomAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingBottomAttr.java @@ -34,4 +34,23 @@ protected void execute(View view, int val) view.setPadding(l, t, r, b); } + + + public static PaddingBottomAttr generate(int val, int baseFlag) + { + PaddingBottomAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new PaddingBottomAttr(val, Attrs.PADDING_BOTTOM, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new PaddingBottomAttr(val, 0, Attrs.PADDING_BOTTOM); + break; + case AutoAttr.BASE_DEFAULT: + attr = new PaddingBottomAttr(val, 0, 0); + break; + } + return attr; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingLeftAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingLeftAttr.java index 344f2ef..960fbd2 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingLeftAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingLeftAttr.java @@ -34,4 +34,23 @@ protected void execute(View view, int val) view.setPadding(l, t, r, b); } + + + public static PaddingLeftAttr generate(int val, int baseFlag) + { + PaddingLeftAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new PaddingLeftAttr(val, Attrs.PADDING_LEFT, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new PaddingLeftAttr(val, 0, Attrs.PADDING_LEFT); + break; + case AutoAttr.BASE_DEFAULT: + attr = new PaddingLeftAttr(val, 0, 0); + break; + } + return attr; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingRightAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingRightAttr.java index 81d1eee..a7db5a9 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingRightAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingRightAttr.java @@ -34,4 +34,23 @@ protected void execute(View view, int val) view.setPadding(l, t, r, b); } + + + public static PaddingRightAttr generate(int val, int baseFlag) + { + PaddingRightAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new PaddingRightAttr(val, Attrs.PADDING_RIGHT, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new PaddingRightAttr(val, 0, Attrs.PADDING_RIGHT); + break; + case AutoAttr.BASE_DEFAULT: + attr = new PaddingRightAttr(val, 0, 0); + break; + } + return attr; + } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingTopAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingTopAttr.java index 0c58761..d8a5e15 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingTopAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/PaddingTopAttr.java @@ -32,6 +32,23 @@ protected void execute(View view, int val) int r = view.getPaddingRight(); int b = view.getPaddingBottom(); view.setPadding(l, t, r, b); + } + public static PaddingTopAttr generate(int val, int baseFlag) + { + PaddingTopAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new PaddingTopAttr(val, Attrs.PADDING_TOP, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new PaddingTopAttr(val, 0, Attrs.PADDING_TOP); + break; + case AutoAttr.BASE_DEFAULT: + attr = new PaddingTopAttr(val, 0, 0); + break; + } + return attr; } } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/TextSizeAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/TextSizeAttr.java index dd9df4c..bb4e2a5 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/TextSizeAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/TextSizeAttr.java @@ -36,5 +36,23 @@ protected void execute(View view, int val) ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, val); } + public static TextSizeAttr generate(int val, int baseFlag) + { + TextSizeAttr attr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + attr = new TextSizeAttr(val, Attrs.TEXTSIZE, 0); + break; + case AutoAttr.BASE_HEIGHT: + attr = new TextSizeAttr(val, 0, Attrs.TEXTSIZE); + break; + case AutoAttr.BASE_DEFAULT: + attr = new TextSizeAttr(val, 0, 0); + break; + } + return attr; + } + } diff --git a/autolayout/src/main/java/com/zhy/autolayout/attr/WidthAttr.java b/autolayout/src/main/java/com/zhy/autolayout/attr/WidthAttr.java index 06e9b78..2de66c9 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/WidthAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/WidthAttr.java @@ -32,4 +32,22 @@ protected void execute(View view, int val) lp.width = val; } + public static WidthAttr generate(int val, int baseFlag) + { + WidthAttr widthAttr = null; + switch (baseFlag) + { + case AutoAttr.BASE_WIDTH: + widthAttr = new WidthAttr(val, Attrs.WIDTH, 0); + break; + case AutoAttr.BASE_HEIGHT: + widthAttr = new WidthAttr(val, 0, Attrs.WIDTH); + break; + case AutoAttr.BASE_DEFAULT: + widthAttr = new WidthAttr(val, 0, 0); + break; + } + return widthAttr; + } + } diff --git a/autolayout/src/main/java/com/zhy/autolayout/utils/AutoLayoutHelper.java b/autolayout/src/main/java/com/zhy/autolayout/utils/AutoLayoutHelper.java index d4ef8ba..9ac666e 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/utils/AutoLayoutHelper.java +++ b/autolayout/src/main/java/com/zhy/autolayout/utils/AutoLayoutHelper.java @@ -19,7 +19,6 @@ import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; @@ -157,7 +156,7 @@ public static AutoLayoutInfo getAutoLayoutInfo(Context context, // String val = array.getString(index); // if (!isPxVal(val)) continue; - if (!isPxVal(array.peekValue(index))) continue; + if (!DimenUtils.isPxVal(array.peekValue(index))) continue; int pxVal = 0; try @@ -227,30 +226,6 @@ public static AutoLayoutInfo getAutoLayoutInfo(Context context, return info; } - private static boolean isPxVal(TypedValue val) - { - if (val != null && val.type == TypedValue.TYPE_DIMENSION && - getComplexUnit(val.data) == TypedValue.COMPLEX_UNIT_PX) - { - return true; - } - return false; - } - - private static int getComplexUnit(int data) - { - return TypedValue.COMPLEX_UNIT_MASK & (data >> TypedValue.COMPLEX_UNIT_SHIFT); - } - - private static boolean isPxVal(String val) - { - if (val.endsWith("px")) - { - return true; - } - return false; - } - public interface AutoLayoutParams { AutoLayoutInfo getAutoLayoutInfo(); diff --git a/autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java b/autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java index bd8ca9f..1252648 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java +++ b/autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java @@ -1,9 +1,11 @@ package com.zhy.autolayout.utils; import android.view.View; -import android.view.ViewGroup; +import com.zhy.autolayout.AutoLayoutInfo; import com.zhy.autolayout.R; +import com.zhy.autolayout.attr.Attrs; +import com.zhy.autolayout.attr.AutoAttr; import com.zhy.autolayout.config.AutoLayoutConifg; /** @@ -22,77 +24,88 @@ public static void auto(View view) autoSize(view); autoPadding(view); autoMargin(view); + autoTextSize(view, AutoAttr.BASE_DEFAULT); } - public static void autoMargin(View view) + /** + * @param view + * @param attrs #Attrs.WIDTH|Attrs.HEIGHT + * @param base AutoAttr.BASE_WIDTH|AutoAttr.BASE_HEIGHT|AutoAttr.BASE_DEFAULT + */ + public static void auto(View view, int attrs, int base) { - if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) - return; + AutoLayoutInfo autoLayoutInfo = AutoLayoutInfo.getAttrFromView(view, attrs, base); + if (autoLayoutInfo != null) + autoLayoutInfo.fillAttrs(view); + } - ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); - if (lp == null) return; + public static void autoTextSize(View view) + { + auto(view, Attrs.TEXTSIZE, AutoAttr.BASE_DEFAULT); + } - Object tag = view.getTag(R.id.id_tag_autolayout_margin); - if (tag != null) return; - view.setTag(R.id.id_tag_autolayout_margin, "Just Identify"); + public static void autoTextSize(View view, int base) + { + auto(view, Attrs.TEXTSIZE, base); + } - lp.leftMargin = getPercentWidthSize(lp.leftMargin); - lp.topMargin = getPercentHeightSize(lp.topMargin); - lp.rightMargin = getPercentWidthSize(lp.rightMargin); - lp.bottomMargin = getPercentHeightSize(lp.bottomMargin); + public static void autoMargin(View view) + { + auto(view, Attrs.MARGIN, AutoAttr.BASE_DEFAULT); + } + public static void autoMargin(View view, int base) + { + auto(view, Attrs.MARGIN, base); } public static void autoPadding(View view) { - Object tag = view.getTag(R.id.id_tag_autolayout_padding); - if (tag != null) return; - view.setTag(R.id.id_tag_autolayout_padding, "Just Identify"); - - int l = view.getPaddingLeft(); - int t = view.getPaddingTop(); - int r = view.getPaddingRight(); - int b = view.getPaddingBottom(); - - l = getPercentWidthSize(l); - t = getPercentHeightSize(t); - r = getPercentWidthSize(r); - b = getPercentHeightSize(b); + auto(view, Attrs.PADDING, AutoAttr.BASE_DEFAULT); + } - view.setPadding(l, t, r, b); + public static void autoPadding(View view, int base) + { + auto(view, Attrs.PADDING, base); } public static void autoSize(View view) { - ViewGroup.LayoutParams lp = view.getLayoutParams(); + auto(view, Attrs.WIDTH | Attrs.HEIGHT, AutoAttr.BASE_DEFAULT); + } - if (lp == null) return; + public static void autoSize(View view, int base) + { + auto(view, Attrs.WIDTH | Attrs.HEIGHT, base); + } + public static boolean autoed(View view) + { Object tag = view.getTag(R.id.id_tag_autolayout_size); - if (tag != null) return; - + if (tag != null) return true; view.setTag(R.id.id_tag_autolayout_size, "Just Identify"); + return false; + } - if (lp.width > 0) - { - int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth(); - int designWidth = AutoLayoutConifg.getInstance().getDesignWidth(); - lp.width = (int) (lp.width * 1.0f / designWidth * screenWidth); - } + public static float getPercentWidth1px() + { + int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth(); + int designWidth = AutoLayoutConifg.getInstance().getDesignWidth(); + return 1.0f * screenWidth / designWidth; + } - if (lp.height > 0) - { - int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight(); - int designHeight = AutoLayoutConifg.getInstance().getDesignHeight(); - lp.height = (int) (lp.height * 1.0f / designHeight * screenHeight); - } + public static float getPercentHeight1px() + { + int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight(); + int designHeight = AutoLayoutConifg.getInstance().getDesignHeight(); + return 1.0f * screenHeight / designHeight; } + public static int getPercentWidthSize(int val) { int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth(); int designWidth = AutoLayoutConifg.getInstance().getDesignWidth(); - return (int) (val * 1.0f / designWidth * screenWidth); } diff --git a/autolayout/src/main/java/com/zhy/autolayout/utils/DimenUtils.java b/autolayout/src/main/java/com/zhy/autolayout/utils/DimenUtils.java new file mode 100644 index 0000000..a055670 --- /dev/null +++ b/autolayout/src/main/java/com/zhy/autolayout/utils/DimenUtils.java @@ -0,0 +1,24 @@ +package com.zhy.autolayout.utils; + +import android.util.TypedValue; + +/** + * Created by zhy on 16/3/3. + */ +public class DimenUtils +{ + private static int getComplexUnit(int data) + { + return TypedValue.COMPLEX_UNIT_MASK & (data >> TypedValue.COMPLEX_UNIT_SHIFT); + } + + public static boolean isPxVal(TypedValue val) + { + if (val != null && val.type == TypedValue.TYPE_DIMENSION && + getComplexUnit(val.data) == TypedValue.COMPLEX_UNIT_PX) + { + return true; + } + return false; + } +} diff --git a/autolayout/src/main/java/com/zhy/autolayout/utils/ScreenUtils.java b/autolayout/src/main/java/com/zhy/autolayout/utils/ScreenUtils.java index 3a9c80f..d7db439 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/utils/ScreenUtils.java +++ b/autolayout/src/main/java/com/zhy/autolayout/utils/ScreenUtils.java @@ -1,6 +1,7 @@ package com.zhy.autolayout.utils; import android.content.Context; +import android.content.res.Resources; import android.graphics.Point; import android.os.Build; import android.util.DisplayMetrics; @@ -14,6 +15,23 @@ public class ScreenUtils { + public static int getStatusBarHeight(Context context) + { + int result = 0; + try + { + int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) + { + result = context.getResources().getDimensionPixelSize(resourceId); + } + } catch (Resources.NotFoundException e) + { + e.printStackTrace(); + } + return result; + } + public static int[] getScreenSize(Context context, boolean useDeviceSize) { @@ -31,7 +49,8 @@ public static int[] getScreenSize(Context context, boolean useDeviceSize) if (!useDeviceSize) { size[0] = widthPixels; - size[1] = heightPixels; + size[1] = heightPixels - getStatusBarHeight(context); + return size; } diff --git a/build.gradle b/build.gradle index 5cfc154..c207088 100644 --- a/build.gradle +++ b/build.gradle @@ -8,9 +8,6 @@ buildscript { classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' classpath 'com.github.dcendents:android-maven-plugin:1.2' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files } } diff --git a/sample/build.gradle b/sample/build.gradle index 2d038fd..6fc8339 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -23,6 +23,8 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.0' compile project(':autolayout') + compile 'com.zhy:base-adapter:2.0.2' compile 'com.android.support:design:23.1.0' compile 'com.android.support:cardview-v7:23.1.0' + compile 'com.android.support:recyclerview-v7:23.2.0' } diff --git a/sample/sample.iml b/sample/sample.iml deleted file mode 100644 index e28f45d..0000000 --- a/sample/sample.iml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sample/src/main/java/com/zhy/sample/CategoryActivity.java b/sample/src/main/java/com/zhy/sample/CategoryActivity.java index e6ecff0..54a4e76 100644 --- a/sample/src/main/java/com/zhy/sample/CategoryActivity.java +++ b/sample/src/main/java/com/zhy/sample/CategoryActivity.java @@ -1,5 +1,6 @@ package com.zhy.sample; +import android.content.Context; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; @@ -19,6 +20,12 @@ public class CategoryActivity extends AutoLayoutActivity {"单个UI", "正方形"}; + @Override + public Context getBaseContext() + { + return super.getBaseContext(); + } + @Override protected void onCreate(Bundle savedInstanceState) { @@ -55,5 +62,4 @@ public int getCount() mTabLayout.setupWithViewPager(mViewPager); } - } diff --git a/sample/src/main/java/com/zhy/sample/MainActivity.java b/sample/src/main/java/com/zhy/sample/MainActivity.java index 9e1155a..953f3c9 100755 --- a/sample/src/main/java/com/zhy/sample/MainActivity.java +++ b/sample/src/main/java/com/zhy/sample/MainActivity.java @@ -13,7 +13,10 @@ import com.zhy.autolayout.AutoLayoutActivity; import com.zhy.sample.fragment.ListFragment; import com.zhy.sample.fragment.PayFragment; +import com.zhy.sample.fragment.RecyclerViewFragment; +import com.zhy.sample.fragment.RecyclerViewGridFragment; import com.zhy.sample.fragment.RegisterFragment; +import com.zhy.sample.fragment.TestFragment; import java.util.ArrayList; @@ -39,7 +42,7 @@ private void setImmersionStatus() { // 透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 透明导航栏 - getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); +// getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } @@ -48,6 +51,9 @@ private void initDatas() { mList.add(new ListFragment()); mList.add(new RegisterFragment()); mList.add(new PayFragment()); + mList.add(new RecyclerViewFragment()); + mList.add(new RecyclerViewGridFragment()); + mList.add(new TestFragment()); mViewPager.setAdapter(new MyAdapter(getSupportFragmentManager(), mList)); } diff --git a/sample/src/main/java/com/zhy/sample/fragment/ListFragment.java b/sample/src/main/java/com/zhy/sample/fragment/ListFragment.java index 2444bd6..133117e 100755 --- a/sample/src/main/java/com/zhy/sample/fragment/ListFragment.java +++ b/sample/src/main/java/com/zhy/sample/fragment/ListFragment.java @@ -41,6 +41,21 @@ private void initView() mList.add(i + ""); } mlistview.setAdapter(new MyAdapter()); + +// mlistview.setAdapter(new CommonAdapter(getActivity(),R.layout.list_item,mList) +// { +// @Override +// protected void onConvertViewCreated(View convertView) +// { +// AutoUtils.autoSize(convertView); +// } +// +// @Override +// public void convert(com.zhy.base.adapter.ViewHolder viewHolder, String s) +// { +// +// } +// }); } class MyAdapter extends BaseAdapter diff --git a/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewFragment.java b/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewFragment.java new file mode 100755 index 0000000..781a72b --- /dev/null +++ b/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewFragment.java @@ -0,0 +1,75 @@ +package com.zhy.sample.fragment; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.zhy.autolayout.utils.AutoUtils; +import com.zhy.base.adapter.recyclerview.CommonAdapter; +import com.zhy.sample.R; +import com.zhy.sample.view.DividerItemDecoration; + +import java.util.ArrayList; +import java.util.List; + +public class RecyclerViewFragment extends Fragment +{ + private View mView; + private RecyclerView mRecyclerView; + private List mList; + private Context mContext; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + { + mView = inflater.inflate(R.layout.fragment_recyclerview, container, false); + initView(); + return mView; + } + + private void initView() + { + mContext = getActivity(); + mRecyclerView = (RecyclerView) mView.findViewById(R.id.id_recyclerview); + mList = new ArrayList(); + for (int i = 0; i < 50; i++) + { + mList.add(i + ""); + } + mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + mRecyclerView.setAdapter(new MyAdapter(getActivity(),mList)); + + mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), + DividerItemDecoration.VERTICAL_LIST)); + } + + class MyAdapter extends CommonAdapter + { + public MyAdapter(Context context, List datas) + { + super(context, R.layout.recyclerview_item, datas); + } + + @Override + public com.zhy.base.adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) + { + com.zhy.base.adapter.ViewHolder viewHolder = super.onCreateViewHolder(parent, viewType); + AutoUtils.autoSize(viewHolder.getConvertView()); + return viewHolder; + } + + @Override + public void convert(com.zhy.base.adapter.ViewHolder viewHolder, String s) + { + } + } + + + +} diff --git a/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewGridFragment.java b/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewGridFragment.java new file mode 100755 index 0000000..a919d72 --- /dev/null +++ b/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewGridFragment.java @@ -0,0 +1,95 @@ +package com.zhy.sample.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.zhy.autolayout.attr.AutoAttr; +import com.zhy.autolayout.utils.AutoUtils; +import com.zhy.sample.R; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class RecyclerViewGridFragment extends Fragment +{ + private View mView; + private RecyclerView mRecyclerView; + private List mList; + private Context mContext; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + { + mView = inflater.inflate(R.layout.fragment_recyclerview_grid, container, false); + initView(); + return mView; + } + + private void initView() + { + mContext = getActivity(); + mRecyclerView = (RecyclerView) mView.findViewById(R.id.id_recyclerview); + mList = new ArrayList(); + for (int i = 0; i < 50; i++) + { + mList.add(i + ""); + } + mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false)); + mRecyclerView.setAdapter(new MyAdapter()); + + } + + class MyAdapter extends RecyclerView.Adapter + { + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) + { + View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_grid, parent, false); + return new ViewHolder(convertView); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) + { + + } + + @Override + public long getItemId(int position) + { + return position; + } + + @Override + public int getItemCount() + { + return mList.size(); + } + + + } + + static class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(View itemView) + { + super(itemView); + Random random = new Random(); + itemView.setBackgroundColor(Color.argb(200, random.nextInt(255), random.nextInt(255), random.nextInt(255))); + //recyclerview,注意添加这一行 + AutoUtils.autoSize(itemView, AutoAttr.BASE_HEIGHT); +// Log.e("", itemView.getLayoutParams().width + " , " + itemView.getLayoutParams().height); + } + } + +} diff --git a/sample/src/main/java/com/zhy/sample/fragment/TestFragment.java b/sample/src/main/java/com/zhy/sample/fragment/TestFragment.java new file mode 100755 index 0000000..b7f2b61 --- /dev/null +++ b/sample/src/main/java/com/zhy/sample/fragment/TestFragment.java @@ -0,0 +1,21 @@ +package com.zhy.sample.fragment; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.zhy.sample.R; + +public class TestFragment extends Fragment +{ + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + { + return inflater.inflate(R.layout.activity_test, container, false); + } + +} diff --git a/sample/src/main/java/com/zhy/sample/view/DividerItemDecoration.java b/sample/src/main/java/com/zhy/sample/view/DividerItemDecoration.java new file mode 100644 index 0000000..741f06b --- /dev/null +++ b/sample/src/main/java/com/zhy/sample/view/DividerItemDecoration.java @@ -0,0 +1,106 @@ +package com.zhy.sample.view;/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * limitations under the License. + */ + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.View; + + +/** + * This class is from the v7 samples of the Android SDK. It's not by me! + *

+ * See the license above for details. + */ +public class DividerItemDecoration extends RecyclerView.ItemDecoration { + + private static final int[] ATTRS = new int[]{ + android.R.attr.listDivider + }; + + public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; + + public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; + + private Drawable mDivider; + + private int mOrientation; + + public DividerItemDecoration(Context context, int orientation) { + final TypedArray a = context.obtainStyledAttributes(ATTRS); + mDivider = a.getDrawable(0); + a.recycle(); + setOrientation(orientation); + } + + public void setOrientation(int orientation) { + if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { + throw new IllegalArgumentException("invalid orientation"); + } + mOrientation = orientation; + } + + @Override + public void onDraw(Canvas c, RecyclerView parent) { + Log.v("recyclerview - itemdecoration", "onDraw()"); + + if (mOrientation == VERTICAL_LIST) { + drawVertical(c, parent); + } else { + drawHorizontal(c, parent); + } + + } + + + public void drawVertical(Canvas c, RecyclerView parent) { + final int left = parent.getPaddingLeft(); + final int right = parent.getWidth() - parent.getPaddingRight(); + + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + RecyclerView v = new RecyclerView(parent.getContext()); + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + final int top = child.getBottom() + params.bottomMargin; + final int bottom = top + mDivider.getIntrinsicHeight(); + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + } + + public void drawHorizontal(Canvas c, RecyclerView parent) { + final int top = parent.getPaddingTop(); + final int bottom = parent.getHeight() - parent.getPaddingBottom(); + + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + final int left = child.getRight() + params.rightMargin; + final int right = left + mDivider.getIntrinsicHeight(); + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + } + + @Override + public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { + if (mOrientation == VERTICAL_LIST) { + outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); + } else { + outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); + } + } +} \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_test.xml b/sample/src/main/res/layout/activity_test.xml new file mode 100644 index 0000000..41bc266 --- /dev/null +++ b/sample/src/main/res/layout/activity_test.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/fragment_recyclerview.xml b/sample/src/main/res/layout/fragment_recyclerview.xml new file mode 100755 index 0000000..34e9785 --- /dev/null +++ b/sample/src/main/res/layout/fragment_recyclerview.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/fragment_recyclerview_grid.xml b/sample/src/main/res/layout/fragment_recyclerview_grid.xml new file mode 100755 index 0000000..4655f75 --- /dev/null +++ b/sample/src/main/res/layout/fragment_recyclerview_grid.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/recyclerview_item.xml b/sample/src/main/res/layout/recyclerview_item.xml new file mode 100755 index 0000000..5648870 --- /dev/null +++ b/sample/src/main/res/layout/recyclerview_item.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/recyclerview_item_grid.xml b/sample/src/main/res/layout/recyclerview_item_grid.xml new file mode 100755 index 0000000..00c5466 --- /dev/null +++ b/sample/src/main/res/layout/recyclerview_item_grid.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 571c02e..16eda15 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':sample', ':autolayout', ':widgetsample' +include ':sample', ':autolayout', ':widgetsample', ':autolayout-widget' diff --git a/widgetsample/build.gradle b/widgetsample/build.gradle index 7d56f30..513b9f8 100644 --- a/widgetsample/build.gradle +++ b/widgetsample/build.gradle @@ -21,6 +21,11 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:23.1.0' compile project(':autolayout') + compile project(':autolayout-widget') + compile 'com.android.support:design:23.1.1' + compile 'com.android.support:support-v4:23.1.1' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:gridlayout-v7:23.1.1' + compile 'com.android.support:cardview-v7:23.1.1' } diff --git a/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/MainActivity.java b/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/MainActivity.java index 821e0ad..5ee91a8 100644 --- a/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/MainActivity.java +++ b/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/MainActivity.java @@ -1,39 +1,70 @@ package com.zhy.autolayout.test.widgets; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; -public class MainActivity extends AppCompatActivity -{ +import com.zhy.autolayout.test.widgets.fragments.SimpleFragment; +import com.zhy.autolayout.widget.AutoLayoutWidgetActivity; + +public class MainActivity extends AutoLayoutWidgetActivity { + private TabLayout mTabLayout; + private ViewPager mViewPager; + @Override - protected void onCreate(Bundle savedInstanceState) - { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + toolbar.setTitle("标题"); + setSupportActionBar(toolbar); + mTabLayout = (TabLayout) findViewById(R.id.id_tablayout); + mViewPager = (ViewPager) findViewById(R.id.id_viewpager); + + mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { + @Override + public Fragment getItem(int position) { + return new SimpleFragment(); + } + + @Override + public int getCount() { + return 2; + } + + @Override + public CharSequence getPageTitle(int position) { + return "Page " + position; + } + }); + + mTabLayout.setupWithViewPager(mViewPager); + } @Override - public boolean onCreateOptionsMenu(Menu menu) - { + public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override - public boolean onOptionsItemSelected(MenuItem item) - { + public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) - { + if (id == R.id.action_settings) { return true; } diff --git a/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/fragments/SimpleFragment.java b/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/fragments/SimpleFragment.java new file mode 100644 index 0000000..ff7876e --- /dev/null +++ b/widgetsample/src/main/java/com/zhy/autolayout/test/widgets/fragments/SimpleFragment.java @@ -0,0 +1,23 @@ +package com.zhy.autolayout.test.widgets.fragments; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.zhy.autolayout.test.widgets.R; + +/** + * Created by zhy on 16/3/3. + */ +public class SimpleFragment extends Fragment +{ + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + { + return inflater.inflate(R.layout.fragment_simple, container, false); + } +} diff --git a/widgetsample/src/main/res/layout/activity_main.xml b/widgetsample/src/main/res/layout/activity_main.xml index 685116d..9523051 100644 --- a/widgetsample/src/main/res/layout/activity_main.xml +++ b/widgetsample/src/main/res/layout/activity_main.xml @@ -1,72 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical"> + + + + + + + + + + diff --git a/widgetsample/src/main/res/layout/fragment_simple.xml b/widgetsample/src/main/res/layout/fragment_simple.xml new file mode 100644 index 0000000..9792bec --- /dev/null +++ b/widgetsample/src/main/res/layout/fragment_simple.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/widgetsample/src/main/res/menu/menu_main.xml b/widgetsample/src/main/res/menu/menu_main.xml index a459e0a..ac17699 100644 --- a/widgetsample/src/main/res/menu/menu_main.xml +++ b/widgetsample/src/main/res/menu/menu_main.xml @@ -5,5 +5,5 @@ + app:showAsAction="never|ifRoom"/> diff --git a/widgetsample/src/main/res/values/strings.xml b/widgetsample/src/main/res/values/strings.xml index 88fc16b..96e2fdf 100644 --- a/widgetsample/src/main/res/values/strings.xml +++ b/widgetsample/src/main/res/values/strings.xml @@ -2,5 +2,5 @@ widgetSample Hello world! - Settings + 设置 diff --git a/widgetsample/src/main/res/values/styles.xml b/widgetsample/src/main/res/values/styles.xml index 766ab99..b5cb951 100644 --- a/widgetsample/src/main/res/values/styles.xml +++ b/widgetsample/src/main/res/values/styles.xml @@ -1,8 +1,23 @@ - + + + + + + diff --git a/widgetsample/widgetsample.iml b/widgetsample/widgetsample.iml deleted file mode 100644 index b227f48..0000000 --- a/widgetsample/widgetsample.iml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file