# AndroidX
**Repository Path**: lgdch/AndroidX
## Basic Information
- **Project Name**: AndroidX
- **Description**: Android框架,支持AndroidX
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-07-20
- **Last Updated**: 2022-07-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AndroidX
Android开发框架(Android development integration tools)
注意:2021-01-01开始
2.0.0版本不向下兼容1.0-2.0之间的版本
2.0.0以下版本是兼容1.0-2.0之间的版本,
2.0.0以上版本进行了代码重构,在2.0以后版本完全兼容2.0以上版本。
2022年开始,此框架不在维护,考虑项目多变,采用部分工具组合方式,请使用[IOCore](https://github.com/RelinRan/IOCore) + [OkApi](https://github.com/RelinRan/OkApi)
在所需之条件下使用对应工具框架即可
## Maven
1.build.grade
```
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
```
2./app/build.grade
```
dependencies {
implementation 'com.github.RelinRan:AndroidX:2.0.17'
}
```
## Application
CoreApplication为AndroidX核心Application,开发者需要继承CoreApplication,然后初始化Http工具.
```
public class App extends CoreApplication {
@Override
public void onCreate() {
super.onCreate();
//初始化Http,设置调试模式为true;
initHttp(true);
}
}
```
## AndroidManifest.xml
1.常用权限配置,根据项目而定。
```
```
2.Provider配置,主要用于文件处理,图片选择。采取了Android10沙盒分区处理(2.0.4以后不需要注册此配置)。
```
```
## Style.xml
1.没有ActionBar+背景白色的主题
```
Android.Theme.Light.NoActionBar
```
2.没有ActionBar+背景透明的主题
```
Android.Theme.Transparent.NoActionBar
```
3.没有ActionBar+状态栏半透明的主题
```
Android.Theme.Light.NoActionBa.StatusBar.Translucent
```
4.没有覆盖背景的Dialog
```
Android.Theme.Dialog.Transparent.Background
```
5.有覆盖背景的Dialog
```
Android.Theme.Dialog.Translucent.Background
```
6.横向ProgressBar
```
Android_ProgressBar_Horizontal
```
7.Dialog缩放动画
```
Android_Window_Animation_Scale
```
8.Dialog底部动画
```
Android_Window_Animation_Bottom
```
## View findViewById
1.注解
```
@ViewInject(R.id.et_user)
private EditText et_user;
```
2.类型强转
```
findViewById(EditText.class,R.id.et_user).setText("user");
```
## Toast
以下方法直接在Activity extends CoreActivity和Fragment extends CoreFragment可直接调用
1.页面底部显示
```
showToast("加载成功");
```
2.页面中间带状态图标显示
```
showStatus(Toast.Status.SUCCESS, "支付成功");
showStatus(Toast.Status.WARNING, "支付失败");
showStatus(Toast.Status.WIRELESS, "联网失败");
```
## RSA
RSA加密解密工具
1.公钥配置
```
RSA.PUBLIC_KEY = "xxx";
```
2.密钥配置
```
RSA.PRIVATE_KEY = "xxx";
```
3.加密
```
String encode = RSA.encrypt("xxx");
```
4.解密
```
String encode = RSA.decrypt("xxx");
```
## Http
在使用Http之前一定需要在Application里面初始化,如果继承了CoreApplication
只需要调用CoreApplication 里面的initHttp方法即可初始化Http工具。
AndroidX中Activity和Fragment已经实现了OnHttpListener接口,只需要重写
public void onHttpRequest();页面进入会进入自动调用。
public void onHttpFailure(ResponseBody responseBody);数据请求失败。
public void onHttpSucceed(ResponseBody responseBody);数据请求请求成功。
1.初始化,如果继承了CoreApplication可忽略此操作,与CoreApplication里面方法initHttp(true)作用等同。
默认采用的Json数据传输格式,如需修改对应传递方式,支持全局修改:options.contentType(Header.CONTENT_JSON);
如果单个接口请求方式修改:params.addHeader(Header.CONTENT_TYPE,Header.CONTENT_FORM);
```
RequestOptions options = new RequestOptions(this);
options.debug(debug);
options.cache(true);
options.contentType(Header.CONTENT_JSON);
options.type(RequestOptions.OK_HTTP);
Http.init(options);
```
2.常规使用
2.1接口类
```
import com.androidx.net.Http;
import com.androidx.net.OnHttpListener;
import com.androidx.net.RequestParams;
public class MainApi {
/**
* 登录
*
* @param accountNumber 账号
* @param pwd 密码
* @param listener
*/
public void accountAndPwdLogin(String accountNumber, String pwd, OnHttpListener listener) {
RequestParams params = new RequestParams();
params.add("accountNumber", accountNumber);
params.add("pwd", pwd);
Http.post(Constants.BASE_URL + "/storeApi/login/accountAndPwdLogin", params, listener);
}
}
```
2.2接口使用(CoreActivity|CoreFragment)
```
private MainApi mainApi;
@Override
protected void onCreate(Bundle bundle, NavigationBar bar) {
mainApi = new MainApi();
}
@Override
public void onHttpRequest() {
super.onHttpRequest();
showLoading();
mainApi.accountAndPwdLogin("account","password",this);
}
@Override
public void onHttpSucceed(ResponseBody responseBody) {
dismissLoading();
//Json解析,Body为公共数据实体类。
Body body = Json.parseJSONObject(Body.class, responseBody.body());
if (body.getCode().equals("0")) {
if (response.url().contains("accountAndPwdLogin")) {
Map map = Json.parseJSONObject(body.getData());
String token = map.get("token");
//全局添加token.
Http.options().header().add("token", token);
showToast(Json.parseObject(body));
}
} else {
showToast(body.getMsg());
}
}
```
## StatusBar
支持对沉浸状态设置、状态栏颜色、字体颜色修改(深色、浅色)
1.设置状态栏颜色
```
StatusBar.setColor(this, Color.parseColor("#3C3F41"));
```
2.设置状态栏文字是否黑色
```
StatusBar.setTextColor(this,false);
```
3.状态栏高度
```
int height = StatusBar.height(this);
```
4.显示状态栏
```
StatusBar.show(this);
```
5.隐藏状态栏
```
StatusBar.hide(this);
```
## NavigationBar
Activity extends CoreActivity | Fragment extends CoreFragment
这2个类里面都有自定义的NavigationBar,只需要重写onCreate(Bundle bundle, NavigationBar bar)
1.设置背景颜色
```
//方式一
navigationBar.setBackgroundColor(Color.parseColor("#3C3F41"));
//方式二
navigationBar.setBackgroundResource(R.color.colorPrimary);
//只修改NavigationBar背景颜色,不修改StatusBar颜色。
navigationBar.setBackgroundColor(Color.parseColor("#3C3F41"),false);
navigationBar.setBackgroundResource(R.color.colorPrimary,false);
```
2.设置标题
```
navigationBar.setTitle("标题");
navigationBar.setTitleTextColor(Color.WHITE);
navigationBar.setTitleTextSize(18, TypedValue.COMPLEX_UNIT_SP);
```
3.设置返回
```
navigationBar.setBackText("返回");
navigationBar.setBackResource(R.mipmap.xxx);
```
4.设置菜单
```
navigationBar.setMenuText("xxxx");
navigationBar.setMenuResource(R.mipmap.xxx);
```
5.设置监听
```
navigationBar.setOnNavigationBarClickListener(new NavigationBar.OnNavigationBarClickListener() {
@Override
public void onNavigationBarClick(View v, int operate) {
if (operate == NavigationBar.BACK_TEXT) {
}
f (operate == NavigationBar.BACK_IMAGE) {
}
if (operate == NavigationBar.MENU_TEXT) {
}
if (operate == NavigationBar.MENU_IMAGE) {
}
}
});
```
6.显示
```
navigationBar.show();
```
7.隐藏
```
navigationBar.hide();
```
7.隐藏
```
navigationBar.hide();
```
### Activity
Activity页面只需要继承CoreActivity,如果是TV研发需要继承TVCoreActivity
```
public class MainActivity extends CoreActivity implements NavigationBar.OnNavigationBarClickListener {
@ViewInject(R.id.et_user)
private EditText et_user;
@Override
protected int getContentViewResId() {
return R.layout.activity_main;
}
@Override
protected void onCreate(Bundle bundle, NavigationBar bar) {
bar.setBackText("✖");
bar.setBackgroundColor(Color.parseColor("#3C3F41"));
bar.setTitleTextColor(Color.WHITE);
bar.setOnNavigationBarClickListener(this);
StatusBar.setColor(this, Color.parseColor("#3C3F41"));
}
@Override
public void onNavigationBarClick(View v, int operate) {
if (operate == NavigationBar.BACK_IMAGE) {
}
}
@Override
public void onHttpRequest() {
super.onHttpRequest();
}
@Override
public void onHttpSucceed(ResponseBody responseBody) {
super.onHttpSucceed(responseBody);
}
@Override
public void onHttpFailure(ResponseBody responseBody) {
super.onHttpFailure(responseBody);
}
```
## Fragment
Fragment页面只需要继承CoreFragment,如果是TV研发需要继承TVCoreFragment
```
public class MainFragment extends CoreFragment {
@Override
protected int getContentViewResId() {
return R.layout.fragment_content;
}
@Override
protected void onCreate(Bundle savedInstanceState, NavigationBar bar) {
bar.setTitle("CoreFragment");
bar.setBackgroundResource(R.color.colorAccent,false);
}
@Override
public void setArguments(@Nullable Bundle args) {
super.setArguments(args);
}
@Override
public void setParameters(Object params) {
super.setParameters(params);
}
@Override
public void onHttpRequest() {
super.onHttpRequest();
}
@Override
public void onHttpSucceed(ResponseBody responseBody) {
super.onHttpSucceed(responseBody);
}
@Override
public void onHttpFailure(ResponseBody responseBody) {
super.onHttpFailure(responseBody);
}
}
```
## SwipeRequestLayout
刷新加载控件,支持上拉加载更多,下拉刷新。
1.xml
```
```
2.设置监听
```
swipeRequestLayout.setOnSwipeRefreshListener(new SwipeLayout.OnSwipeRefreshListener() {
@Override
public void onSwipeRefresh() {
//1.刷新释放会进入;
//2.setRefreshing(true)会触发
}
});
swipeRequestLayout.setOnSwipeLoadListener(new SwipeLayout.OnSwipeLoadListener() {
@Override
public void onSwipeLoad() {
//1.上拉释放进入
//2.setLoading(true)会触发
}
});
```
3.进入页面开始获取数据,setRefreshing(true),会调用onSwipeRefresh();方法。
```
swipeRequestLayout.setRefreshing(true);
```
4.停止刷新
```
swipeRequestLayout.setRefreshing(false);
```
5.停止加载
```
swipeRequestLayout.setLoading(false);
```
6.设置禁用刷新
```
swipeRequestLayout.setRefreshable(false);
```
7.设置禁用加载
```
swipeRequestLayout.setLoadable(false);
```
## ShapeButton
支持圆角自定义,可调整状态显示(Button、Text -> androidx:state="button")
```
```
## TextGroupView
ImageView + TextView + TextView + TextView + ImageView + EditText组合控件
多用于横排布局,左边图标,中间文字或者输入框,右边箭头类似的布局。
详细:https://github.com/RelinRan/TextGroupView
```
```
## BannerPager
轮播图,支持指示器位置自定义,显示自定义。
```
```
1.设置数据
```
private BannerPager banner;
private BannerListAdapter bannerListAdapter;
public void initBanner() {
if (banner == null) {
banner = findViewById(R.id.banner);
bannerListAdapter = new BannerListAdapter(this);
bannerListAdapter.setOnItemClickListener(new BannerAdapter.OnItemClickListener() {
@Override
public void onItemClick(BannerAdapter adapter, View view, Integer item, int position) {
Log.i("RRL", "->onItemClick -1- item=" + item + ",position=" + position);
int realPosition = adapter.getRealPosition(position);
}
});
}
int resIds[] = {R.mipmap.ic_banner_0, R.mipmap.ic_banner_1, R.mipmap.ic_banner_2, R.mipmap.ic_banner_3};
List list = new ArrayList<>();
for (int i = 0; i < resIds.length; i++) {
list.add(resIds[i]);
}
banner.setAdapter(bannerListAdapter);
bannerListAdapter.setItems(list);
}
private class BannerListAdapter extends BannerAdapter {
public BannerListAdapter(Context context) {
super(context);
}
@Override
public void onItemBindViewHolder(ViewHolder holder, Integer item, int position) {
ImageView imageView = holder.find(R.id.banner_image);
holder.find(ImageView.class, R.id.banner_image).setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(item);
}
}
```
2.轮播持续时间
```
androidx:duration="3000"
```
3.指示器显示位置
```
androidx:indicatorGravity="bottom|center_horizontal"
```
4.指示器显示位置
```
androidx:indicatorGravity="bottom|center_horizontal"
```
5.指示器选中背景
```
androidx:indicatorSelected="@drawable/android_indicator_selected"
```
6.指示器未选中背景
```
androidx:indicatorUnSelected="@drawable/android_indicator_unselected"
```
6.自动轮播
```
androidx:isAutoPlay="true"
```
## PagerTabStrip(2.0.7以后不建议使用)/PagerTab(2.0.7才支持该控件)
ViewPager顶部Tab,也可单独使用为Tab.
```
```
1.tab布局自适应,超屏可滑动
```
androidx:tabLayout="wrap_content"
```
2.tab布局占屏宽,非超屏
```
androidx:tabLayout="match_parent"
```
3.tab文字颜色,支持selector
```
androidx:tabTextColor="@color/selector_tab_text"
```
4.tab文字selector
```
```
5.分割线颜色
```
androidx:dividerColor="#EF7A4A"
```
6.分割线宽度
```
androidx:dividerWidth="1dp"
```
7.tab水平内间距
```
androidx:tabPaddingHorizontal="40dp"
```
8.下划线布局超屏可滑动
```
androidx:underlineLayout="wrap_content"
```
9.下划线布局非超屏
```
androidx:underlineLayout="match_parent"
```
10.下划线资源drawable
```
androidx:underlineResId="@drawable/shape_radius_green"
```
11.单独使用设置String[]数据
```
String[] pageTitles = new String[]{"全部", "待支付", "待发货", "待评价", "已完成","售后"};
PagerTabStrip strip = findViewById(R.id.strip);
strip.setPageTitle(pageTitles);
strip.setPosition(0);
```
12.ViewPager使用设置数据源
```
PagerTabStrip strip = findViewById(R.id.strip);
ViewPager viewPager = findViewById(R.id.pager);
//adapter为FragmentPagerAdapter或者PagerAdapter的子类,然后重写getPageTitle()方法设置tab文字。
viewPager.setAdapter(adapter);
strip.setViewPager(viewPager);
strip.setPosition(0);
```
## ClearEditTextView
快速清除内容的EditTextView
```
```
1.清除按钮图标
```
android:drawableRight="@drawable/android_ic_clear_text"
```
## CircleTimerView
圆圈计时器
```
```
1.持续时长
```
androidx:duration="1000"
```
2.当前时长
```
androidx:millisInFuture="250"
```
3.线条宽度
```
androidx:strokeWidth="15dp"
```
4.外部颜色
```
androidx:outsideColor="#C4C4C4"
```
5.内部颜色
```
androidx:insideColor="#C4C4C4"
```
6.是否是按钮
```
androidx:button="false"
```
## CircleProgressView
圆圈进度
```
```
1.进度背景颜色
```
androidx:progressBackgroundColor="#DEDEDE"
```
2.进度颜色
```
androidx:progressColor="#DEDEDE"
```
3.文字是否可见
```
androidx:progressTextVisibility="visible"
```
4.文字颜色
```
androidx:progressTextColor="@color/colorPrimary"
```
5.文字大小
```
androidx:progressTextSize="14sp"
```
## AlphabetView
字母列表
```
```
1.文字默认颜色
```
android:textColor="@color/colorPrimary"
```
2.文字选中颜色
```
app:checkColor="@color/colorPrimary"
```
3.文字大小
```
android:textSize="14sp"
```
## StatusView
状态(成功、警告、网络)
```
```
1.状态类型
```
app:status="success"
```
2.颜色
```
android:color="@color/colorPrimary"
```
3.圆圈线条宽度,成功|警告类型使用
```
app:circleStrokeWidth="1dp"
```
4.是否使用动画
```
app:isAnimator="false"
```
## PhotoView
```
```
1.设置可缩放
```
photoView.enable();
```
2.设置最大缩放值
```
photoView.setMaxScale(3.0f);
```
## RecyclerAdapter
RecyclerView使用的Adapter,可快速绑定View对应数据。
```
private class RecyclerListAdapter extends RecyclerAdapter {
public RecyclerListAdapter(Context context) {
super(context);
}
@Override
protected int getItemLayoutResId() {
return R.layout.item_text;
}
@Override
protected void onItemBindViewHolder(ViewHolder holder, String item, int position) {
holder.find(TextView.class, R.id.tv_label).setText(item);
holder.addItemClick(R.id.tv_label);
}
}
```
## BasisAdapter
实用于ListView、GridView、FlowListView,在BaseAdapter基础上升级封装,可快速构建列表。
```
private class DebugAdapter extends BasisAdapter {
public DebugAdapter(Context context) {
super(context);
}
@Override
public int getItemLayoutResId() {
return R.layout.android_debug_item;
}
@Override
public void onItemBindViewHolder(ViewHolder holder, ResponseBody item, int position) {
holder.find(TextView.class, R.id.debug_row_page_value).setText(item.page());
holder.find(TextView.class, R.id.debug_row_time_value).setText(item.time());
holder.find(TextView.class, R.id.debug_row_url_value).setText(item.url());
holder.find(TextView.class, R.id.debug_row_header_value).setText(item.requestParams().header().toString());
holder.find(TextView.class, R.id.debug_row_params_value).setText(item.requestParams().params().toString());
holder.find(TextView.class, R.id.debug_row_result_value).setText(item.body());
}
}
```
## RecyclerView 分割线/间隔设置
```
recyclerView.addItemDecoration(new DividerItemDecoration(LinearLayoutManager.HORIZONTAL, ContextCompat.getColor(getContext(), R.color.colorDivider), 2));
recyclerView.addItemDecoration(new SpaceItemDecoration(LinearLayoutManager.HORIZONTAL, 2));
```
## DataStorage
数据缓存,目前支持int string double float long Set Map List