关闭

与android不得不说的故事之KJFrameForAndroid

标签: KJLibraryandroid框架MVC快速编程ui
1693人阅读 评论(1) 收藏 举报
分类:

那些年,与android不得不说的故事之KJFrameForAndroid框架UI篇(一)

简介:KJFrameForAndroid 又叫KJLibrary,是一个android的orm 和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用;
KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全的开发APP。我们提倡用最少的代码,完成最多的操作,用最高的效率,完成最复杂的功能。

普通的开发者经常把数据初始化,控件监听,控件绑定写在Oncreate,这样不仅使Oncreate变得很臃肿,而且还影响整体的美观性和结构性。从整体上来看,使用了KJFrameForAndroid,我们整个Activity都变得很整洁了。

快速入门
AndroidStudio
build.gradle中添加:
compile ‘org.kymjs.kjframe:kjframe:2.5.5’

这里写图片描述这里写图片描述

public class MainActivity extends KJActivity {

    //绑定btn_name 监听
  @BindView(id = R.id.btn_name, click = true)
    private Button btn_name;
    @BindView(id = R.id.btn_jump, click = true)
    private Button btn_jump;
    @BindView(id = R.id.text_name)
    private TextView text_name;


    @Override
    public void setRootView() {
        setContentView(R.layout.activity_main);
    }

    @Override
    public void initData() {
        super.initData();
        //在这里可以初始化一些数据
        //是否显示activity的状态
        KJLoger.SHOW_ACTIVITY_STATE = true;
    }

    @Override
    public void initWidget() {
        super.initWidget();
        //初始化一些空间
        btn_name.setText("我改变了");
    }

    @Override
    public void widgetClick(View v) {
        super.widgetClick(v);
        //一些控件进行监听

        if (v.getId() == R.id.btn_name) {
            text_name.setText("我是textview,我已经改变了");
        }
        if (v.getId() == R.id.btn_jump) {
            //跳转到secondActivity,但不finish
            showActivity(MainActivity.this, SecondActivity.class);
        }
    }

    private void jump() {
        //跳转到secondActivity,finish()
        skipActivity(MainActivity.this, SecondActivity.class);

        //还有待参数的跳转
        //showActivity(Activity aty, Class<?> cls, Bundle extras)
        //showActivity(Activity aty, Intent it)
    }


    @Override
    public void registerBroadcast() {
        super.registerBroadcast();
        //注册广播
    }

    @Override
    public void unRegisterBroadcast() {
        super.unRegisterBroadcast();
        //注销广播
    }

    @Override
    public void initDataFromThread() {
        super.initDataFromThread();
        //在线程中初始化数据,注意不能在这里执行UI操作
    }

    @Override
    protected void threadDataInited() {
        super.threadDataInited();
        //获取initDataFromThread()里面初始化的数据
    }
}

KJLoger.SHOW_ACTIVITY_STATE = true; 开启了,就会在logcat里面打印activity生命周期的变化
如图:这里写图片描述

不仅如此,还支持activity的堆栈管理 KJActivityStack

 KJLoger.debug("------------>" + KJActivityStack.create().getCount());

        //退出出App
        KJActivityStack.create().appExit(aty);

        //获取当前Activity(栈顶Activity) 没有找到则返回null
        KJActivityStack.create().findActivity(SecondActivity.class).finish();

        //获取当前Activity(栈顶Activity)
        KJActivityStack.create().topActivity();

        //结束当前Activity(栈顶Activity)
        KJActivityStack.create().finishActivity(SecondActivity.class);
        //等等

也支持fragment 的简易使用和圆形头像的使用,大大的方便了使用者。

FirstFragment .java

public class FirstFragment extends KJFragment{
    @Override
    protected View inflaterView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_first,container,false);
        return view;
    }
}

fragment_first:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="大家好,我是fragment first"
        android:id="@+id/textView2"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

SecondFragment .java

public class SecondFragment extends KJFragment{

    @BindView(id = R.id.headIamge, click = true)
    private RoundImageView headImage;

    @Override
    protected View inflaterView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_second,container,false);
        return view;
    }

    @Override
    protected void initWidget(View parentView) {
        super.initWidget(parentView);
        headImage.setBorderInsideColor(getActivity().getResources().getColor(R.color.colorPrimary));    //内圈颜色
        headImage.setBorderOutsideColor(getActivity().getResources().getColor(R.color.colorAccent));  //外圈颜色
        headImage.setImageResource(R.mipmap.test);  //设置图片
        headImage.setBorderThickness(3); //设置边框粗细
    }

    @Override
    public void onChange() {
        super.onChange();
        //当调用FragmentDemo 里面的changeFragment方法时,显示时会被调用(类似于onResume)
        KJLoger.debug("--------->改变了onChange");
    }

    @Override
    protected void initData() {
        super.initData();
    }

    @Override
    protected void widgetClick(View v) {
        super.widgetClick(v);
    }
}

R.layout.fragment_second

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="大家好,我是fragment second"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <org.kymjs.kjframe.widget.RoundImageView
        android:id="@+id/headIamge"
        android:layout_width="300dp"
        android:layout_height="350dp"
        android:layout_above="@+id/textView2"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignStart="@+id/textView2"
        android:scaleType="centerCrop"
        android:layout_marginBottom="55dp"
        android:layout_marginLeft="39dp"
        android:layout_marginStart="39dp"
        android:src="@mipmap/ic_launcher"></org.kymjs.kjframe.widget.RoundImageView>

</RelativeLayout>

这里大家注意了,这里是用了KJ框架的自定义控件RoundImageView来实现圆形头像的

FragmentDemo.java:

public class FragmentDemo extends KJActivity {

    @BindView(id = R.id.btn_first, click = true)
    private Button btn_first;
    @BindView(id = R.id.btn_second, click = true)
    private Button btn_second;
    private FirstFragment firstFragment;
    private SecondFragment secondFragment;



    @Override
    public void setRootView() {
        setContentView(R.layout.acitvity_fragment_demo);
    }

    @Override
    public void widgetClick(View v) {
        super.widgetClick(v);
        if (v.getId() == R.id.btn_first) {
            KJLoger.debug("---------->" + "widgetClick");
            if (null == firstFragment) {
                firstFragment = new FirstFragment();
            }
            changeFragment(R.id.layout_fragment, firstFragment);
        }
        if (v.getId() == R.id.btn_second) {
            if (null == secondFragment) {
                secondFragment = new SecondFragment();
            }
         changeFragment(R.id.layout_fragment, secondFragment);    }
    }
}

对比
原来的

FragmentManager fm = getFragmentManager();  
FragmentTransaction transaction = fm.beginTransaction();  
secondFragment= new SecondFragment();  
transaction.replace(R.id.id_content, secondFragment);  
transaction.commit();  

框架的只需要一句,而且做了很好的处理,快准狠

changeFragment(R.id.layout_fragment, secondFragment);

特别说明:
框架作者:张涛
GitHub项目地址:https://github.com/kymjs/KJFrameForAndroid

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1999次
    • 积分:42
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    文章存档
    最新评论