与android不得不说的故事之KJFrameForAndroid

原创 2015年11月19日 17:00:38

那些年,与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

版权声明:本文为博主原创文章,未经博主允许不得转载。

KJFrameForAndroid 2.0框架使用

KJFrameForAndroid 又叫KJLibrary,是一个Android的快速开发工具包。同时封装了android中的Bitmap、Http、插件模块加载操作的框架,使开发者更容易轻松实现这些...

KJframeforandroid框架之 KJBlog学习(一)

KJframeforandroid 框架为基础的KJBlog学习(1)

KJFrameForAndroid开源框架的使用

使用KJFrameForAndroid开源框架可以为开发节省很多时间,带来很多方便。KJFrameForAndroid的使用非常简单,其文档已经说的非常明白,而且也有demo可以参看。 KJFrame...

值得推荐的android开源框架

1、volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载;(2) 网络请求的排序(scheduli...

用MVP架构开发Android应用

本文原创,转载请注明地址:http://kymjs.com/code/2015/11/09/01 怎样从架构级别去搭建一个APP,怎样让他应对日益更改的界面与业务逻辑? 今天为大家讲述一种在And...
  • kymjs
  • kymjs
  • 2015年11月10日 12:58
  • 1705

KJFrame使用注意项

在使用KJFrame中的KJHttp时,调用post时默认方法是带缓存的,当不需要使用缓存时调用 public Requestbyte[]> post(String url, HttpParams p...

阅读KJFrameAndroid--各种基类和控件注入

传说KJFrame不错 我也加入他们的群了,下载了一个Demo下来当然还有源代码

KJFrameForAndroid框架学习----深入理解注解原理

Android开发中,有一个让人又爱又恨的方法叫findViewById(int);我想如果你是一民Android开发者,必然知道这个方法,让我们来看一下KJFrameForAndroid框架是如何解...
  • kymjs
  • kymjs
  • 2014年08月23日 19:52
  • 1817

Android ORM应用开发框架KJFrameForAndroid使用详解

本文将为大家介绍一款Android ORM应用开发框架KJFrameForAndroid,很多时候我们也叫它KJLibrary。 KJFrameForAndroid简介 KJFra...

【KJLibrary框架学习】基于BaseActivity的MyBaseActivity代码和用法

KJLibrary是一个安卓开源ku
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:与android不得不说的故事之KJFrameForAndroid
举报原因:
原因补充:

(最多只允许输入30个字)