提交 70aa0f9e 编写于 作者: J jessyan

Optional AutoLayout

上级 7044aa36
......@@ -26,7 +26,8 @@
</intent-filter>
</activity>
<!-- autolayout meta
将设计图的宽高配置后,配合AutoLauout控件使用,在设计图尺寸以外的其它尺寸手机上,也能达到和设计图一样的效果
配置设计图的宽高,配合AutoLauout控件使用,在设计图尺寸以外的其它尺寸手机上,也能达到和设计图一样的效果
注意: 本框架并不强制你使用 AutoLayout,如果你不想使用 AutoLayout,就不要配置下面的 meta-data
-->
<meta-data
android:name="design_width"
......@@ -34,6 +35,7 @@
<meta-data
android:name="design_height"
android:value="1920"/>
<!--glide配置-->
<meta-data
android:name="com.jess.arms.widget.imageloader.glide.GlideConfiguration"
......
......@@ -7,37 +7,23 @@ import android.view.View;
import com.jess.arms.base.delegate.IActivity;
import com.jess.arms.mvp.IPresenter;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
import com.zhy.autolayout.AutoFrameLayout;
import com.zhy.autolayout.AutoLinearLayout;
import com.zhy.autolayout.AutoRelativeLayout;
import javax.inject.Inject;
import static com.jess.arms.base.delegate.ActivityDelegate.LAYOUT_FRAMELAYOUT;
import static com.jess.arms.base.delegate.ActivityDelegate.LAYOUT_LINEARLAYOUT;
import static com.jess.arms.base.delegate.ActivityDelegate.LAYOUT_RELATIVELAYOUT;
import static com.jess.arms.utils.ThirdViewUtil.convertAutoView;
/**
* 因为java只能单继承,所以如果有需要继承特定Activity的三方库,那你就需要自己自定义Activity
* 继承于这个特定的Activity,然后按照将BaseActivity的格式,复制过去记住一定要实现{@link IActivity}
*/
public abstract class BaseActivity<P extends IPresenter> extends RxAppCompatActivity implements IActivity{
public abstract class BaseActivity<P extends IPresenter> extends RxAppCompatActivity implements IActivity {
protected final String TAG = this.getClass().getSimpleName();
@Inject
protected P mPresenter;
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = null;
if (name.equals(LAYOUT_FRAMELAYOUT)) {
view = new AutoFrameLayout(context, attrs);
}
if (name.equals(LAYOUT_LINEARLAYOUT)) {
view = new AutoLinearLayout(context, attrs);
}
if (name.equals(LAYOUT_RELATIVELAYOUT)) {
view = new AutoRelativeLayout(context, attrs);
}
View view = convertAutoView(name, context, attrs);
return view == null ? super.onCreateView(name, context, attrs) : view;
}
......@@ -62,6 +48,7 @@ public abstract class BaseActivity<P extends IPresenter> extends RxAppCompatActi
/**
* 这个Activity是否会使用Fragment,框架会根据这个属性判断是否注册{@link android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks}
* 如果返回false,那意味着这个Activity不需要绑定Fragment,那你再在这个Activity中绑定继承于 {@link com.jess.arms.base.BaseFragment} 的Fragment将不起任何作用
*
* @return
*/
@Override
......
......@@ -3,7 +3,7 @@ package com.jess.arms.base;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.jess.arms.utils.KnifeUtil;
import com.jess.arms.utils.ThirdViewUtil;
import com.zhy.autolayout.utils.AutoUtils;
/**
......@@ -16,7 +16,7 @@ public abstract class BaseHolder<T> extends RecyclerView.ViewHolder implements V
super(itemView);
itemView.setOnClickListener(this);//点击事件
AutoUtils.autoSize(itemView);//适配
KnifeUtil.bindTarget(this, itemView);//绑定
ThirdViewUtil.bindTarget(this, itemView);//绑定
}
......
......@@ -30,7 +30,7 @@ import timber.log.Timber;
* Contact with jess.yan.effort@gmail.com
*/
@Singleton
public class AppManager {
public final class AppManager {
protected final String TAG = this.getClass().getSimpleName();
public static final String APPMANAGER_MESSAGE = "appmanager_message";
public static final String IS_NOT_ADD_ACTIVITY_LIST = "is_add_activity_list";//是否加入到activity的list,管理
......
package com.jess.arms.utils;
import android.app.Activity;
import android.app.Dialog;
import android.view.View;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* Created by zhiyicx on 2016/3/17.
*/
public class KnifeUtil {
private KnifeUtil() {
}
public static Unbinder bindTarget(Object target, Object source) {
if (source instanceof Activity) {
return ButterKnife.bind(target, (Activity) source);
} else if (source instanceof View) {
return ButterKnife.bind(target, (View) source);
} else if (source instanceof Dialog) {
return ButterKnife.bind(target, (Dialog) source);
} else {
return Unbinder.EMPTY;
}
}
}
package com.jess.arms.utils;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import com.zhy.autolayout.AutoFrameLayout;
import com.zhy.autolayout.AutoLinearLayout;
import com.zhy.autolayout.AutoRelativeLayout;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import static com.jess.arms.base.delegate.ActivityDelegate.LAYOUT_FRAMELAYOUT;
import static com.jess.arms.base.delegate.ActivityDelegate.LAYOUT_LINEARLAYOUT;
import static com.jess.arms.base.delegate.ActivityDelegate.LAYOUT_RELATIVELAYOUT;
/**
* Created by zhiyicx on 2016/3/17.
*/
public class ThirdViewUtil {
public static int USE_AUTOLAYOUT = -1;//0 说明 AndroidManifest 里面没有使用 AutoLauout 的Meta,即不使用 AutoLayout,1 为有 Meta ,即需要使用
private ThirdViewUtil() {
}
public static Unbinder bindTarget(Object target, Object source) {
if (source instanceof Activity) {
return ButterKnife.bind(target, (Activity) source);
} else if (source instanceof View) {
return ButterKnife.bind(target, (View) source);
} else if (source instanceof Dialog) {
return ButterKnife.bind(target, (Dialog) source);
} else {
return Unbinder.EMPTY;
}
}
@Nullable
public static View convertAutoView(String name, Context context, AttributeSet attrs) {
//本框架并不强制你使用 AutoLayout
//如果你不想使用 AutoLayout ,就不要在 AndroidManifest 中声明, AutoLayout 的 Meta属性(design_width,design_height)
if (USE_AUTOLAYOUT == -1) {
USE_AUTOLAYOUT = 1;
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo;
try {
applicationInfo = packageManager.getApplicationInfo(context
.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo == null || applicationInfo.metaData == null
|| !applicationInfo.metaData.containsKey("design_width")
|| !applicationInfo.metaData.containsKey("design_height")) {
USE_AUTOLAYOUT = 0;
}
} catch (PackageManager.NameNotFoundException e) {
USE_AUTOLAYOUT = 0;
}
}
if (USE_AUTOLAYOUT == 0) {
return null;
}
View view = null;
if (name.equals(LAYOUT_FRAMELAYOUT)) {
view = new AutoFrameLayout(context, attrs);
} else if (name.equals(LAYOUT_LINEARLAYOUT)) {
view = new AutoLinearLayout(context, attrs);
} else if (name.equals(LAYOUT_RELATIVELAYOUT)) {
view = new AutoRelativeLayout(context, attrs);
}
return view;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册