diff --git a/README.md b/README.md index a0d78ed..aa40659 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,16 @@ # AndroidAutoLayout -Android屏幕适配方案,直接填写设计图上的像素尺寸即可完成适配。 +[DEPRECATED]Android屏幕适配方案,直接填写设计图上的像素尺寸即可完成适配。 + +>目前没有精力,已停止维护,使用前务必看明白代码,明确该方案可以解决自身问题,有扩展代码能力,否则不建议使用。 非常感谢 : 吃土豆的人 的协作。 -讨论群:99913714 + +>推荐使用[AndroidAutoSize](https://github.com/JessYanCoding/AndroidAutoSize) + +AndroidAutoSize目前作者一直在维护,私下也有一些交流,也是 AndroidAutoLayout 3年的使用者,自研了[AndroidAutoSize](https://github.com/JessYanCoding/AndroidAutoSize), 在目前本库已经没有精力维护的情况下,推荐使用;如果使用了本库,迁移成本也非常低,[迁移指南](https://github.com/JessYanCoding/AndroidAutoSize/issues/90)。 + + ## 效果图 @@ -59,13 +66,13 @@ dependencies { ``` dependencies { - compile 'com.zhy:autolayout:1.4.1' + compile 'com.zhy:autolayout:1.4.5' } ``` * Eclipse -下载[AutoLayoutDemoForEclipse.zip](AutoLayoutDemoForEclipse.zip),导入到eclipse中即可。 +建议使用As,方便版本更新。实在不行,只有复制粘贴源码了。 ## 用法 @@ -283,12 +290,36 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) ### 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/autolayout/build.gradle b/autolayout/build.gradle index 2c13686..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.4.1" +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/AutoContentFrameLayout.java b/autolayout/src/main/java/AutoContentFrameLayout.java deleted file mode 100644 index 9ceac2b..0000000 --- a/autolayout/src/main/java/AutoContentFrameLayout.java +++ /dev/null @@ -1,46 +0,0 @@ -import android.content.Context; -import android.support.v7.internal.widget.ContentFrameLayout; -import android.util.AttributeSet; - -import com.zhy.autolayout.AutoFrameLayout; -import com.zhy.autolayout.utils.AutoLayoutHelper; - -/** - * Created by zhy on 16/2/25. - */ -public class AutoContentFrameLayout extends ContentFrameLayout -{ - private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this); - - - public AutoContentFrameLayout(Context context) - { - super(context); - } - - public AutoContentFrameLayout(Context context, AttributeSet attrs) - { - super(context, attrs); - } - - public AutoContentFrameLayout(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/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java b/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java index ae34c3f..ebe2a2a 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java +++ b/autolayout/src/main/java/com/zhy/autolayout/AutoLayoutInfo.java @@ -15,6 +15,10 @@ 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; @@ -88,10 +92,10 @@ public static AutoLayoutInfo getAttrFromView(View view, int attrs, int base) //padding if ((attrs & Attrs.PADDING) != 0) { - autoLayoutInfo.addAttr(MarginLeftAttr.generate(view.getPaddingLeft(), base)); - autoLayoutInfo.addAttr(MarginTopAttr.generate(view.getPaddingTop(), base)); - autoLayoutInfo.addAttr(MarginRightAttr.generate(view.getPaddingRight(), base)); - autoLayoutInfo.addAttr(MarginBottomAttr.generate(view.getPaddingBottom(), base)); + 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) { 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 83e63f3..d0821b5 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java +++ b/autolayout/src/main/java/com/zhy/autolayout/attr/MarginTopAttr.java @@ -34,6 +34,7 @@ protected void execute(View view, int val) } ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); lp.topMargin = val; + } 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 e6da19b..1252648 100644 --- a/autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java +++ b/autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java @@ -35,7 +35,8 @@ public static void auto(View view) public static void auto(View view, int attrs, int base) { AutoLayoutInfo autoLayoutInfo = AutoLayoutInfo.getAttrFromView(view, attrs, base); - autoLayoutInfo.fillAttrs(view); + if (autoLayoutInfo != null) + autoLayoutInfo.fillAttrs(view); } public static void autoTextSize(View view) diff --git a/sample/build.gradle b/sample/build.gradle index d806aa3..6fc8339 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -23,6 +23,7 @@ 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/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/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 index 130af2d..781a72b 100755 --- a/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewFragment.java +++ b/sample/src/main/java/com/zhy/sample/fragment/RecyclerViewFragment.java @@ -11,6 +11,7 @@ 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; @@ -42,51 +43,33 @@ private void initView() mList.add(i + ""); } mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - mRecyclerView.setAdapter(new MyAdapter()); + mRecyclerView.setAdapter(new MyAdapter(getActivity(),mList)); mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); } - class MyAdapter extends RecyclerView.Adapter + class MyAdapter extends CommonAdapter { - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) - { - View convertView = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, parent, false); - return new ViewHolder(convertView); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) + public MyAdapter(Context context, List datas) { - + super(context, R.layout.recyclerview_item, datas); } @Override - public long getItemId(int position) + public com.zhy.base.adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return position; + com.zhy.base.adapter.ViewHolder viewHolder = super.onCreateViewHolder(parent, viewType); + AutoUtils.autoSize(viewHolder.getConvertView()); + return viewHolder; } @Override - public int getItemCount() + public void convert(com.zhy.base.adapter.ViewHolder viewHolder, String s) { - return mList.size(); } - - } - static class ViewHolder extends RecyclerView.ViewHolder - { - public ViewHolder(View itemView) - { - super(itemView); - //对于listview,注意添加这一行,即可在item上使用高度 - AutoUtils.autoSize(itemView); - } - } }