美文网首页
常见第三方库使用

常见第三方库使用

作者: 破荒之恋 | 来源:发表于2017-07-10 14:56 被阅读602次

常用来注释的三方库 (未完待续)

compile 'com.jakewharton:butterknife:7.0.1'

在setContentView(R.layout.activity_home)这句的后面加上

    ButterKnife.bind(this);

就可以使用注释了

@Bind(R.id.home_tv_title_center)
TextView mTvCenter;
@Bind(R.id.home_iv_menu)
ImageView mIvMenu;
@Bind(R.id.contacts_tab_rl)
LinearLayout mContactsTabRl;

可参考:
http://www.jianshu.com/p/154891851fe2

用来监听事件发生的开源库

compile 'org.greenrobot:eventbus:3.0.0'

首先在首页注册eventbus

 EventBus.getDefault().register(this);

用来切换的tabLayout

  compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.0.8@aar'

常见布局带代码

  <com.flyco.tablayout.CommonTabLayout
        android:id="@+id/home_tab_layout"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:background="#f6f6f1"
        app:tl_iconGravity="TOP"
        app:tl_iconHeight="25dp"
        app:tl_iconWidth="30dp"
        app:tl_indicator_color="@color/white"
        app:tl_textSelectColor="@color/colorPrimary"
        app:tl_textUnselectColor="@color/gray_black"
        app:tl_textsize="13sp"
        />

当然首先在布局界面加上

xmlns:app="http://schemas.android.com/apk/res-auto"

Glide 图片请求库

https://github.com/bumptech/glide
教程地址:http://ocnyang.com/tags/Glide/

常用来使用悬浮按钮的库

compile 'cc.trity.floatingactionbutton:library:1.0.0'

常见布局

 <android.support.design.widget.FloatingActionButton
    android:id="@+id/main_fab_enter_edit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="36dp"
    android:layout_marginLeft="30dp"
    android:layout_marginStart="30dp"
    android:src="@drawable/add"
    app:backgroundTint="#0288D1"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal"
    app:layout_anchorGravity="bottom|right"
    app:pressedTranslationZ="12dp"
    app:rippleColor="#a6a6a6"/>

当然布局中顶部要加上这句

 xmlns:app="http://schemas.android.com/apk/res-auto"

常用开加载圆形图片的开源库、如头像

https://github.com/hdodenhof/CircleImageView

compile 'de.hdodenhof:circleimageview:2.1.0'

常见布局

  <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/duanzi_civ_avatar"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:src="@drawable/avatar"
        android:layout_gravity="center"
        />

常用的多功能TextView

参考:https://github.com/chenBingX/SuperTextView/blob/master/README_zh.md

添加依赖:

 compile 'com.github.chenBingX:SuperTextView:v1.4'

xml中使用:

<SuperTextView
android:layout_width="50dp"
android:layout_height="50dp"

//设置圆角。会同时作用于填充和边框(如果边框存在的话)。
//如果要设置为圆形,只需要把该值设置为宽或长的1/2即可。
app:corner="25dp"
//设置左上角圆角
app:left_top_corner="true"
//设置右上角圆角
app:right_top_corner="true"
//设置左下角圆角
app:left_bottom_corner="true"
//设置右下角圆角
app:right_bottom_corner="true"
//设置填充颜色
app:solid="@color/red"
//设置边框颜色
app:stroke_color="@color/black"
//设置边框的宽度。
app:stroke_width="2dp"
//放置一个drawable在背景层上。默认居中显示。
//并且默认大小为SuperTextView的一半。
app:state_drawable="@drawable/emoji"
//设置drawable的显示模式。可选值如下:
// left、top、right、bottom、center(默认值)、
//leftTop、rightTop、leftBottom、rightBottom、
//fill(充满整个SuperTextView,此时会使设置drawable的大小失效)
app:state_drawable_mode="center"
//设置drawable的height
app:state_drawable_height="30dp"
//设置drawable的width
app:state_drawable_width="30dp"
//设置drawble相对于基础位置左边的距离
app:state_drawable_padding_left="10dp"
//设置drawble相对于基础位置上边的距离
app:state_drawable_padding_top="10dp"
// boolean类型。是否显示drawable。
//如果你想要设置的drawable显示出来,必须设置为true。
//当不想让它显示时,再设置为false即可。
app:isShowState="true"
//是否开启文字描边功能。
//注意,启用这个模式之后通过setTextColor()设置的颜色将会被覆盖。
//你需要通过text_fill_color来设置文字的颜色。
app:text_stroke="true"
// 文字的描边颜色。默认为Color.BLACK。
app:text_stroke_color="@color/black"
// 文字描边的宽度。
app:text_stroke_width="1dp"
// 文字填充的颜色。默认为Color.BLACK。
app:text_fill_color="@color/blue"
// boolean类型。是否启用Adjuster功能。
//具体干什么,需要在Java中为SuperTextView实现一个Adjuster。
//当你启用这个功能而没有实现自己的Adjuster时,
//SuperTextView会启用默认的Adjuster。它会按照一定的规则调整文字大小。
app:autoAdjust="true"
/>

以上这些属性,均可以在Java中进行动态的设置。同时也能够获得它们的值。例如:

mSuperTextView.setCorner(10);
mSuperTextView.getCorner();

常用来解析Json数据的开源库

 compile 'com.google.code.gson:gson:2.4'

例如传进一条json数据

public class GsonHelper {
public static List<DuanziBean> getDuanziBeanList(String response){

    List<DuanziBean> mDuanziBeanList = new ArrayList<>();
    try {
        JSONObject jsonObject = new JSONObject(response);
        String dataArrayStr = jsonObject.getJSONObject("data").getString("data");
        Type type = new TypeToken<List<DuanziBean>>(){}.getType();
        Gson gson = new Gson();
        mDuanziBeanList = gson.fromJson(dataArrayStr, type);
        return mDuanziBeanList;
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return mDuanziBeanList;
}

  public static List<MeiziBean> getMeiziBean(String response){
    List<MeiziBean> meiziBeanList = new ArrayList<>();
    try {
        JSONObject jsonObject = new JSONObject(response);
            String meiziArrayStr = jsonObject.getString("results");
            Type meiziListType = new TypeToken<List<MeiziBean>>(){}.getType();
            Gson gson = new Gson();
            meiziBeanList = gson.fromJson(meiziArrayStr, meiziListType);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    return meiziBeanList;
}

}

用来加载各种对话框的开源库

compile 'cc.duduhuo.dialog:smartisan-dialog:1.0.0'

创建普通对话框、选项对话框、警告对话框、自定义对话框,外加上单选、多选、进度条对话框

/* 普通的Dialog
* @param view
*/
public void normalDialog(View view) {
    final NormalDialog dialog = SmartisanDialog.createNormalDialog(this);
    dialog.setTitle("这是标题")
            .setMsg("对话框信息")
            .setMsgGravity(Gravity.CENTER)
            //.setLeftBtnBackground()
            .setLeftBtnText("取消")   // 设置文本的按钮会显示,不设置文本则不显示
            .setRightBtnText("确定")
            .show();
    // 设置点击监听(下同,不再解释)
    dialog.setOnSelectListener(new NormalDialog.OnSelectListener() {
        @Override
        public void onLeftSelect() {
            Toast.makeText(DialogActivity.this, "onLeftSelect", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }

        @Override
        public void onRightSelect() {
            Toast.makeText(DialogActivity.this, "onRightSelect", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
}

 *
 * 带两个选项的Dialog
 *
 * @param view
 */
public void twoOptionsDialog(View view) {
    final TwoOptionsDialog dialog = SmartisanDialog.createTwoOptionsDialog(this);
    dialog.setTitle("选择一个选项")
            .setOp1Text("第一个选项")    // 设置第一个选项的文本
            .setOp2Text("第二个选项")    // 设置第二个选项的文本
            .show();
    dialog.setOnSelectListener(new TwoOptionsDialog.OnSelectListener() {
        @Override
        public void onOp1() {
            Toast.makeText(DialogActivity.this, "onOp1", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }

        @Override
        public void onOp2() {
            Toast.makeText(DialogActivity.this, "onOp2", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
}


 /**
 * 带三个选项的Dialog
 *
 * @param view
 */
public void threeOptionsDialog(View view) {
    final ThreeOptionsDialog dialog = SmartisanDialog.createThreeOptionsDialog(this);
    dialog.setOp1Text("选项1")
            .setOp2Text("选项2")
            .setOp3Text("选项3")
            .show();
    dialog.setOnSelectListener(new ThreeOptionsDialog.OnSelectListener() {
        @Override
        public void onOp1() {
            Toast.makeText(DialogActivity.this, "onOp1", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }

        @Override
        public void onOp2() {
            Toast.makeText(DialogActivity.this, "onOp2", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }

        @Override
        public void onOp3() {
            Toast.makeText(DialogActivity.this, "onOp3", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
}
/**
 * 警告Dialog
 *
 * @param view
 */
public void warningDialog(View view) {
    final WarningDialog dialog = SmartisanDialog.createWarningDialog(this);
    dialog.setTitle("确定退出登录吗")
            .setConfirmText("退出登录")
            .show();
    dialog.setOnConfirmListener(new WarningDialog.OnConfirmListener() {
        @Override
        public void onConfirm() {
            Toast.makeText(DialogActivity.this, "onConfirm", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
}

/**
 * 选项列表Dialog
 *
 * @param view
 */
public void optionListDialog(View view) {
    List<String> options = new ArrayList<>(6);
    options.add("选项1");
    options.add("选项2");
    options.add("选项3");
    options.add("选项4");
    options.add("选项5");
    options.add("选项6");
    final OptionListDialog dialog = SmartisanDialog.createOptionListDialog(this);
    dialog.setTitle("请选择一个选项")
            .setOptionList(options)
            .setLastOption("选项5")   // 上次选择的选项
            .setItemGravity(Gravity.CENTER) // Item是居左、居中还是居右
            .setLastColor(0xFF40B64A)   // 上次选择的选项显示的颜色,用于区分
            .show();
    // setOnOptionItemSelectListener()方法必须在show()方法之后调用,否则无效
    dialog.setOnOptionItemSelectListener(new OnOptionItemSelectListener() {
        @Override
        public void onSelect(int position, CharSequence option) {
            Toast.makeText(DialogActivity.this, "position = " + position + ", option = " + option, Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });

}

/**
 * 自定义内容视图的Dialog
 *
 * @param view
 */
public void customizedDialog1(View view) {
    final CustomizedDialog dialog = SmartisanDialog.createCustomizedDialog(this);
    View rootView = getLayoutInflater().inflate(R.layout.test_view, null);
    dialog.addView(rootView)
            .setTitle("自定义内容视图")
            .show();
}

/**
 * 自定义内容视图的Dialog
 *
 * @param view
 */
public void customizedDialog2(View view) {
    final CustomizedDialog dialog = SmartisanDialog.createCustomizedDialog(this);
    View rootView = getLayoutInflater().inflate(R.layout.test_view, null);
    dialog.addView(rootView)
            .setTitle("自定义内容视图")
            .setLeftBtnText("按钮1")  // 设置文本的按钮会显示,不设置文本则不显示
            .setRightBtnText("按钮2")
            .show();
    dialog.setOnSelectListener(new CustomizedDialog.OnSelectListener() {
        @Override
        public void onLeftSelect() {
            Toast.makeText(DialogActivity.this, "onLeftSelect", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }

        @Override
        public void onRightSelect() {
            Toast.makeText(DialogActivity.this, "onRightSelect", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
}


private static final String TAG = "DialogActivity";
/**
 * 单选对话框
 * @param view
 */
public  void customizedSingleDialog(View view){
    //通过builder构造器gouzao

    AlertDialog.Builder builder =new AlertDialog.Builder(this);

    builder.setTitle("选择你喜欢的水果");

    final String items[]={"香蕉","西瓜","黄瓜","哈密瓜","苹果"};

    //-1代表默认没有条目被选中
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //把选择到的条目取出来
            Log.i(TAG, "---onClick--: "+select);
            String item = items[select];
            Log.i(TAG, "---item--: "+item);
                Toast.makeText(getApplicationContext(), "---" + item, Toast.LENGTH_LONG).show();
                //关闭对话框
            dialog.dismiss();
        }
    });
    builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //把选择到的条目取出来
            select = which;
            String item=items[which];
            Toast.makeText(getApplicationContext(), item+"---", Toast.LENGTH_SHORT).show();
            //关闭对话框
            //dialog.dismiss();
        }
    });
//显示对话框
    builder.show();
}


/**
 * 多选按钮对话框
 * @param view
 */
public  void customizedMutilDialog(View view){

    //通过构造器构造
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setTitle("请选择你喜欢的课程");
    final String items[]={"android","C","C++","C#","IOs","java","html"};

  //用来判断条目是否被选中
    final boolean []checkedItems={true,false,true,false,false,false,false};
    builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        //条目的点击事件
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        }
    });
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            StringBuffer sb=new StringBuffer();
            for(int i=0;i<checkedItems.length;i++){
                //判断一下选中的
                if(checkedItems[i]){
                    String fruit=items[i];
                    sb.append(fruit+" ");
                }
            }
            Toast.makeText(getApplicationContext(), sb, Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
    builder.show();

}

/**
 * 进度条对话框
 * @param view
 */
public void customizedProgressDialog(View view){

    //通过构造器来构造
    final ProgressDialog dialog=new ProgressDialog(this);
    dialog.setTitle("正在玩命加载中。。。");
    //设置一下进度条的样式
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    //最后一步一定要show()出来
    dialog.show();
    //创建一个子线程
    new Thread(){
        public void run(){
            //设置进度条的最大值
            dialog.setMax(100);
            //设置当前进度
            for(int i=0;i<=20;i++){
                dialog.setProgress(i*5);
                //睡眠一下
                SystemClock.sleep(200);
            }
            dialog.show();
            dialog.dismiss();
        }}.start();
}

}

用来实现页面滑动返回

 compile 'cn.bingoogolapple:bga-swipebacklayout:1.0.8'

先封装一个BaseActivity


/**
 * Activity基类,所有Activity应该继承此类
 *
 * Author: nanchen
 * Email: liushilin520@foxmail.com
 * Date: 2017-04-07  14:33
 */

public abstract class BaseActivity extends AppCompatActivity implements BGASwipeBackHelper.Delegate{

    private CompositeSubscription mCompositeSubscription;

    protected BGASwipeBackHelper mSwipeBackHelper;

    /**
     * 获取布局ID
     *
     * @return  布局id
     */
    protected abstract int getContentViewLayoutID();



    /**
     * 界面初始化前期准备
     */
    protected void beforeInit() {

    }

    /**
     * 初始化布局以及View控件
     */
    protected abstract void initView(Bundle savedInstanceState);

    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        super.setContentView(layoutResID);
        ButterKnife.bind(this);
    }

    public CompositeSubscription getCompositeSubscription(){
        checkSubscription();
        return this.mCompositeSubscription;
    }

    /**
     * 检查是否为空,以免导致空指针
     */
    private void checkSubscription(){
        if (this.mCompositeSubscription == null){
            this.mCompositeSubscription = new CompositeSubscription();
        }
    }

    /**
     * 增加一个调度器
     */
    protected void addSubscription(Subscription s){
        checkSubscription();
        this.mCompositeSubscription.add(s);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        // 「必须在 Application 的 onCreate 方法中执行 BGASwipeBackManager.getInstance().init(this) 来初始化滑动返回」
        // 在 super.onCreate(savedInstanceState) 之前调用该方法
        initSwipeBackFinish();
//        setStatusBarTransparent();
        super.onCreate(savedInstanceState);
        beforeInit();
        if (getContentViewLayoutID() != 0) {
            setContentView(getContentViewLayoutID());
            initView(savedInstanceState);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (this.mCompositeSubscription != null && !this.mCompositeSubscription.isUnsubscribed()){
            this.mCompositeSubscription.unsubscribe();
        }
    }

    /**
     * 初始化滑动返回。在 super.onCreate(savedInstanceState) 之前调用该方法
     */
    private void initSwipeBackFinish() {
        mSwipeBackHelper = new BGASwipeBackHelper(this, this);

        // 「必须在 Application 的 onCreate 方法中执行 BGASwipeBackManager.getInstance().init(this) 来初始化滑动返回」
        // 下面几项可以不配置,这里只是为了讲述接口用法。

        // 设置滑动返回是否可用。默认值为 true
        mSwipeBackHelper.setSwipeBackEnable(true);
        // 设置是否仅仅跟踪左侧边缘的滑动返回。默认值为 true
        mSwipeBackHelper.setIsOnlyTrackingLeftEdge(true);
        // 设置是否是微信滑动返回样式。默认值为 true
        mSwipeBackHelper.setIsWeChatStyle(true);
        // 设置阴影资源 id。默认值为 R.drawable.bga_sbl_shadow
        mSwipeBackHelper.setShadowResId(R.drawable.bga_sbl_shadow);
        // 设置是否显示滑动返回的阴影效果。默认值为 true
        mSwipeBackHelper.setIsNeedShowShadow(true);
        // 设置阴影区域的透明度是否根据滑动的距离渐变。默认值为 true
        mSwipeBackHelper.setIsShadowAlphaGradient(true);
        // 设置触发释放后自动滑动返回的阈值,默认值为 0.3f
        mSwipeBackHelper.setSwipeBackThreshold(0.3f);
    }

    /**
     * 是否支持滑动返回。这里在父类中默认返回 true 来支持滑动返回,如果某个界面不想支持滑动返回则重写该方法返回 false 即可
     *
     * @return
     */
    @Override
    public boolean isSupportSwipeBack() {
        return true;
    }

    /**
     * 正在滑动返回
     *
     * @param slideOffset 从 0 到 1
     */
    @Override
    public void onSwipeBackLayoutSlide(float slideOffset) {
    }

    /**
     * 没达到滑动返回的阈值,取消滑动返回动作,回到默认状态
     */
    @Override
    public void onSwipeBackLayoutCancel() {
    }

    /**
     * 滑动返回执行完毕,销毁当前 Activity
     */
    @Override
    public void onSwipeBackLayoutExecuted() {
        mSwipeBackHelper.swipeBackward();
    }

    @Override
    public void onBackPressed() {
        // 正在滑动返回的时候取消返回按钮事件
        if (mSwipeBackHelper.isSliding()) {
            return;
        }
        mSwipeBackHelper.backward();
    }


    public void setStatusBarTransparent() {
        StatusBarUtil.setTransparent(this);
    }

    /**
     * 设置状态栏颜色
     *
     * @param color
     */
    protected void setStatusBarColor(@ColorInt int color) {
        setStatusBarColor(color, StatusBarUtil.DEFAULT_STATUS_BAR_ALPHA);
    }

    /**
     * 设置状态栏颜色
     *
     * @param color
     * @param statusBarAlpha 透明度
     */
    public void setStatusBarColor(@ColorInt int color, @IntRange(from = 0, to = 255) int statusBarAlpha) {
        StatusBarUtil.setColorForSwipeBack(this, color, statusBarAlpha);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


}

用来打印logger的开源库

 compile 'com.orhanobut:logger:2.1.1'

初始化:

  Logger.addLogAdapter(new AndroidLogAdapter());

参考:https://github.com/orhanobut/logger

leakcanary 内存泄漏检测工具

https://github.com/square/leakcanary

BaseRecyclerViewAdapterHelper 的强大应用

 compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.27'

参考:
http://www.jianshu.com/p/b343fcff51b0

相关文章

网友评论

      本文标题:常见第三方库使用

      本文链接:https://www.haomeiwen.com/subject/ifphhxtx.html