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