先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
正文
private Handler timeHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==1) {
computeTime();
if(minute==0 && second<10) {
minutes_tv.setText(“00”);
seconds_tv.setText(“0”+second);
}else if(minute==0 && second>=10) {
minutes_tv.setText(“00”);
seconds_tv.setText(second+“”);
}else if(minute!=0 && minute<10 && second<10) {
minutes_tv.setText(“0”+minute);
seconds_tv.setText(“0”+second);
}else if(minute!=0 && minute<10 && second>=10) {
minutes_tv.setText(“0”+minute);
seconds_tv.setText(second+“”);
}else if(minute!=0 && minute>=10 && second<10) {
minutes_tv.setText(minute+“”);
seconds_tv.setText(“0”+second);
}else if(minute!=0 && minute>=10 && second>=10) {
minutes_tv.setText(minute+“”);
seconds_tv.setText(second+“”);
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// Activity 中去掉标题栏
supportRequestWindowFeature(Window.FEATURE_NO_TITLE); // AppCompatActivity 中去掉标题栏
// 标题栏和状态栏颜色一致
StatusBarUtils.setColor(AwaitOrderActivity.this);
setContentView(R.layout.activity_await_order);
//初始化操作
msgApi = WXAPIFactory.createWXAPI(this, null);
msgApi.registerApp(WeiXinConstants.APP_ID);
initView();
initData();
startRun();
initEvent();
initAdapter();
}
/**
- 开启倒计时
*/
private void startRun() {
new Thread(new Runnable() {
@Override
public void run() {
while (isRun) {
try {
if(isFirst) {
isFirst = false; // 第一次进入的时候不执行延迟一秒
}else {
Thread.sleep(1000); // sleep 1000ms
}
Message message = Message.obtain();
message.what = 1;
timeHandler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
/**
- 倒计时计算
*/
private void computeTime() {
second–;
if (second < 0) {
minute–;
second = 59;
if (minute < 0) {
System.out.println(“---------”);
deleteAwaitOrder();
finish();
}
}
}
public void deleteAwaitOrder() {
// 删除待支付订单
RestClient.builder()
.params(“orderId”,orderId)
.url(IpConfig.APP_ID+“/orderApp/deleteOrder”)
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
Result result = new Result<>();
Type type = new TypeToken<Result>(){}.getType();
result = new Gson().fromJson(response,type);
if(result.getStatus().equals(“200”)) {
}
}
})
.failure(new IFailure() {
@Override
public void onFailure() {
System.out.println(“删除待支付订单失败!”);
}
}).build().put();
}
public void initView() {
rl_04 = findViewById(R.id.rl_04);
rl_05 = findViewById(R.id.rl_05);
pay_success_icon_weixin = findViewById(R.id.pay_success_icon_weixin);
pay_success_icon_zhifubao = findViewById(R.id.pay_success_icon_zhifubao);
rv_child_info = findViewById(R.id.rv_child_info);
ll_fanHui = findViewById(R.id.ll_fanHui);
radio0 = findViewById(R.id.radio0);
radio1 = findViewById(R.id.radio1);
radio2 = findViewById(R.id.radio2);
radioGroup1 = findViewById(R.id.radioGroup1);
btn_pay = findViewById(R.id.btn_pay);
hours_tv = findViewById(R.id.hours_tv);
minutes_tv = findViewById(R.id.minutes_tv);
seconds_tv = findViewById(R.id.seconds_tv);
// 商家信息
tv_organ_name = findViewById(R.id.tv_organ_name);
tv_user_name = findViewById(R.id.tv_user_name);
tv_tel = findViewById(R.id.tv_tel);
tv_address = findViewById(R.id.tv_address);
// 课程信息
tv_course_name = findViewById(R.id.tv_course_name);
tv_category = findViewById(R.id.tv_category);
tv_week = findViewById(R.id.tv_week);
tv_begin_end_time = findViewById(R.id.tv_begin_end_time);
tv_price1 = findViewById(R.id.tv_price1);
tv_price2 = findViewById(R.id.tv_price2);
tv_price3 = findViewById(R.id.tv_price3);
tv_course_room = findViewById(R.id.tv_course_room);
order_id = findViewById(R.id.order_id);
order_time = findViewById(R.id.order_time);
rl_04.setOnClickListener(this);
rl_05.setOnClickListener(this);
btn_pay.setOnClickListener(this);
ll_fanHui.setOnClickListener(this);
// 默认支付宝后面的对勾隐藏
pay_success_icon_zhifubao.setVisibility(View.INVISIBLE);
// 创建布局管理
GridLayoutManager manager = new GridLayoutManager(getApplicationContext(),1,GridLayoutManager.VERTICAL,false);
GridItemDecoration divider = new GridItemDecoration.Builder(getApplicationContext())
.setHorizontalSpan(R.dimen.h_column_padding)
.setColorResource(R.color.grey_main) // 线的颜色
.setShowLastLine(false) // 是否显示最后一行的线
.build();
rv_child_info.addItemDecoration(divider);
rv_child_info.setLayoutManager(manager);
}
public void initData(){
bundle = this.getIntent().getExtras();
orderId = bundle.getString(“orderId”);
timeId = bundle.getString(“timeId”);
enrollTime = bundle.getString(“enrollTime”);
organUserId = bundle.getString(“organUserId”);
System.out.println(“enrollTime–” +enrollTime);
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
try {
String ss = DateTimeUtil.dealDateFormat(enrollTime);
System.out.println(“ss–”+ss);
//当前系统时间
Date currentTime = sdf.parse(DateTimeUtil.getNow());
// 查询数据库里的时间
Date firstTime = sdf.parse(ss);
String str = DateTimeUtil.getTime(currentTime,firstTime);
System.out.println(“时间差为:”+str);
minutes = DateTimeUtil.getTimeMinute(currentTime, firstTime);
seconds = DateTimeUtil.getTimeSecond(currentTime, firstTime);
System.out.println(“相差的分钟+”+minutes);
System.out.println(“相差的秒+”+seconds);
minute = (int)(1-minutes-1);
second = (int)(60-seconds);
if(minute < 0) {
deleteAwaitOrder();
}
} catch (ParseException e) {
e.printStackTrace();
}
order_time.setText(enrollTime);
order_id.setText(orderId);
// 根据 userId 查孩子的信息
RestClient
.builder()
.params(“userId”, ShareUtils.getUserId(getApplicationContext(),“userId”,“”))
.url(IpConfig.APP_ID+“/childInfoApp/getChildInfo”)
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
Result result;
Type type = new TypeToken<Result>() {}.getType();// 解决 json 解析时出现的 bug
result = new Gson().fromJson(response, type);
Log.i(“请求数据为:”,result.toString());
dataList.clear();// 下拉刷新叠加问题,每次下拉清空数据
if(result.getStatus().equals(“200”)) {
System.out.println(“获取孩子信息成功!”);
//数据封装
for (int i = 0;i<result.getData().size();i++) {
Child child = new Child();
child.setChildId(result.getData().get(i).getChildId());
child.setChildName(result.getData().get(i).getChildName());
child.setChildSex(result.getData().get(i).getChildSex());
child.setChildGrade(result.getData().get(i).getChildGrade());
dataList.add(child);
}
initAdapter();
}else {
System.out.println(“您还没有添加孩子信息!”);
}
}
})
.failure(new IFailure() {
@Override
public void onFailure() {
}
})
.build()
.get();
// 根据 organUserId 查机构信息
organUserId = ShareUtils.getProperty(AwaitOrderActivity.this,“organUserId”,“”);
RestClient.builder()
.params(“userId”, organUserId)
.url(IpConfig.APP_ID+“/organInfoApp/findOrganByUserId”)
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
Result result = new Result<>();
Type type1 = new TypeToken<Result>() {}.getType();
result = new Gson().fromJson(response, type1);
Log.i(“请求数据:”,result.toString());
// 赋值
if(result.getStatus().equals(“200”)) {
tv_organ_name.setText(result.getDataEntity().getOrganName());
tv_user_name.setText(result.getDataEntity().getUser().getFullName());
tv_tel.setText(result.getDataEntity().getUser().getTel());
tv_address.setText(result.getDataEntity().getAddress());
}else {
ToastUtils.showShort(getApplicationContext(),“请求数据失败!”);
}
}
})
.failure(new IFailure() {
@Override
public void onFailure() {
System.out.println(“根据 organUserId 查机构信息失败!”);
}
}).build().get();
// 根据 timeId 查课程时间段信息
RestClient.builder()
.params(“timeId”, timeId)
.url(IpConfig.APP_ID+“/courseApp/findByTimeId”)
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
Result<List
Type type1 = new TypeToken<Result<List
result = new Gson().fromJson(response, type1);
Log.i(“请求数据:”,result.toString());
if(result.getStatus().equals(“200”)) {
tv_course_name.setText(result.getDataEntity().get(0).get(“course_name”).toString());
tv_category.setText(result.getDataEntity().get(0).get(“grade_name”).toString() + “、” +
result.getDataEntity().get(0).get(“subject_name”).toString());
tv_week.setText(result.getDataEntity().get(0).get(“time_week”).toString()+" ");
tv_begin_end_time.setText(result.getDataEntity().get(0).get(“time_course_begin”).toString()+ “-” +result.getDataEntity().get(0).get(“time_course_end”).toString());
tv_price1.setText( NumberFormat.getInstance().format(result.getDataEntity().get(0).get(“course_price_thirty_two”)));
tv_price2.setText(NumberFormat.getInstance().format(result.getDataEntity().get(0).get(“course_price_thirty_two”)));
tv_price3.setText( NumberFormat.getInstance().format(result.getDataEntity().get(0).get(“course_price_thirty_two”)));
thirtyTwo = result.getDataEntity().get(0).get(“course_price_thirty_two”).toString();
fortyEight = result.getDataEntity().get(0).get(“course_price_forty_eight”).toString();
sixtyFour = result.getDataEntity().get(0).get(“course_price_sixty_four”).toString();
if(result.getDataEntity().get(0).get(“course_room”).toString().isEmpty()) {
tv_course_room.setText(“暂无”);
}else {
tv_course_room.setText(result.getDataEntity().get(0).get(“course_room”).toString());
}
}
}
})
.failure(new IFailure() {
@Override
public void onFailure() {
System.out.println(“// 根据 timeId 查课程时间段信息失败!”);
}
}).build().get();
}
public void initEvent() {
radioGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
System.out.println(i+“---------2-2222222”);
RadioButton rb = findViewById(i);
if(rb.getText().toString().equals(“32”)) {
tv_price1.setText(thirtyTwo);
tv_price2.setText(thirtyTwo);
tv_price3.setText(thirtyTwo);
courseHour = 32;
}else if(rb.getText().toString().equals(“48”)) {
tv_price1.setText(fortyEight);
tv_price2.setText(fortyEight);
tv_price3.setText(fortyEight);
courseHour = 48;
}else {
tv_price1.setText(sixtyFour);
tv_price2.setText(sixtyFour);
tv_price3.setText(sixtyFour);
courseHour = 64;
}
}
});
rl_04.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
break;
}
case MotionEvent.ACTION_UP: {
payType = “0”;
// 所有对勾回复默认
recover();
pay_success_icon_weixin.setVisibility(View.VISIBLE);
break;
}
case MotionEvent.ACTION_MOVE:{
rl_04.setBackgroundResource(R.color.white);
break;
}
}
return true;
}
});
rl_05.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
payType = “1”;
// 所有对勾回复默认
recover();
pay_success_icon_zhifubao.setVisibility(View.VISIBLE);
break;
case MotionEvent.ACTION_MOVE:
rl_05.setBackgroundResource(R.color.white);
break;
}
return true;
}
});
}
public void initAdapter() {
// 创建适配器
orderChildListAdapter = new OrderChildListAdapter(AwaitOrderActivity.this,dataList);
// 设置适配器
rv_child_info.setAdapter(orderChildListAdapter);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.ll_fanHui: {
finish();
break;
}
case R.id.btn_pay: { //立即支付
// 封装对象
Order order = new Order();
order.setOrder_id(orderId);
order.setEnroll_time(enrollTime);
order.setChild_id(ShareUtils.getProperty(AwaitOrderActivity.this,“childId”,“”));
order.setPay_type(Integer.valueOf(payType));
order.setTime_id(timeId);
order.setUser_id(ShareUtils.getUserId(getApplicationContext(),“userId”,“”)); // 家长
order.setOrgan_user_id(organUserId);
order.setCourseHour(courseHour);
order.setOrderStatus(1);
Gson gson = new Gson();
String jsonCourse = gson.toJson(order);
ShareUtils.putOJson(getApplicationContext(),“jsonCourse”, jsonCourse);
// 判断支付方式
if(payType.equals(“0”)) { // 微信
System.out.println(“-----------------------微信支付中…---------------------------------”);
RestClient.builder()
.params(“orderno”,orderId)
.params(“amount”,“1”)
.params(“body”,“微信支付测试”)
.url(IpConfig.APP_ID+“/wxpay/addOrder”)
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
Result<Map<String,String>> result = new Result<>();
Type type = new TypeToken<Result<Map<String,String>>>() {}.getType();
result = new Gson().fromJson(response, type);
Log.i(“请求数据:”,result.toString());
System.out.println(“----”+result+“----”);
//调起支付
PayReq request = new PayReq();
request.appId = WeiXinConstants.APP_ID;
request.partnerId = WeiXinConstants.partnerId;
request.prepayId = result.getDataEntity().get(“prepayid”);
request.packageValue = result.getDataEntity().get(“package”);
request.nonceStr = result.getDataEntity().get(“noncestr”);
request.timeStamp = result.getDataEntity().get(“timestamp”);
request.sign = result.getDataEntity().get(“sign”);
msgApi.sendReq(request);
}
})
.failure(new IFailure() {
@Override
public void onFailure() {
System.out.println(“调起微信支付时出错!”);
}
}).build().get();
}
if(payType.equals(“1”)) { // 支付宝
System.out.println(“-----------------------支付宝支付中…---------------------------------”);
RestClient.builder().url(IpConfig.APP_ID+“/aliPay/ali/pay/order/create”)
.params(“orderTittle”, tv_course_name.getText().toString()) // 标题
.params(“orderPrice”, tv_price3.getText().toString()) // 价格
.params(“orderId”, orderId) // 订单编号
.success(new ISuccess() {
@Override
public void onSuccess(String response) {
System.out.println(“—>>>”+response);
final String orderInfo = response; // 订单信息
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(AwaitOrderActivity.this);
Map <String,String> result = alipay.payV2(orderInfo,true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
})
.failure(new IFailure() {
@Override
public void onFailure() {
System.out.println(“报名时出错!”);
}
}).build().get();
}
break;
}
}
}
public void recover() {
pay_success_icon_weixin.setVisibility(View.INVISIBLE);
pay_success_icon_zhifubao.setVisibility(View.INVISIBLE);
}
}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout
xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“@drawable/main_background”
tools:context=“.activity.OrderInfoActivity”>
<RelativeLayout
android:id=“@+id/rl_01”
android:layout_width=“match_parent”
android:layout_height=“40dp”
android:background=“@color/app_color”>
<LinearLayout
android:id=“@+id/ll_fanHui”
android:layout_width=“wrap_content”
android:layout_height=“match_parent”
android:gravity=“center”>
<ImageView
android:layout_width=“16dp”
android:layout_height=“16dp”
android:layout_alignParentLeft=“true”
android:layout_marginStart=“15dp”
android:layout_marginEnd=“10dp”
android:layout_centerVertical=“true”
android:background=“@mipmap/icon_left_arrow”
/>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“待支付”
android:textSize=“@dimen/textSize4”
android:textColor=“#FFF”
android:layout_centerHorizontal=“true”
android:layout_centerVertical=“true”/>
<ScrollView
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_below=“@+id/rl_01”>
<RelativeLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent” >
<RelativeLayout
android:id=“@+id/rl_attention”
android:background=“@color/white”
android:gravity=“center”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”>
<TextView
android:id=“@+id/tv_11”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_toLeftOf=“@+id/hours_tv”
android:text=“请在”
android:layout_marginBottom=“10dp”
android:layout_marginTop=“10dp”>
<TextView
android:id=“@+id/hours_tv”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_toLeftOf=“@+id/colon1”
android:textColor=“@color/red”
android:gravity=“center”
android:text=“00”/>
<TextView
android:id=“@+id/colon1”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_marginLeft=“3.0dip”
android:layout_toLeftOf=“@+id/minutes_tv”
android:text=“:”
android:textColor=“@color/red”
android:textStyle=“bold” />
<TextView
android:id=“@+id/minutes_tv”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:text=“00”
android:layout_toLeftOf=“@+id/colon2”
android:textColor=“@color/red”
android:gravity=“center”/>
<TextView
android:id=“@+id/colon2”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:layout_marginLeft=“3.0dip”
android:layout_marginRight=“3.0dip”
android:layout_toLeftOf=“@+id/seconds_tv”
android:text=“:”
android:textColor=“@color/red”
android:textStyle=“bold” />
<TextView
android:id=“@+id/seconds_tv”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:gravity=“center”
android:text=“00”
android:textColor=“@color/red”/>
<TextView
android:layout_toRightOf=“@+id/seconds_tv”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“内支付,超时订单将自动取消”
android:layout_marginBottom=“10dp”
android:layout_marginTop=“10dp”>
<RelativeLayout
android:id=“@+id/rl_02”
android:layout_marginTop=“10dp”
android:layout_below=“@+id/rl_attention”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:paddingBottom=“10dp”
android:background=“@color/white”>
<RelativeLayout
android:id=“@+id/rl_organ_info”
android:layout_width=“match_parent”
android:layout_height=“50dp” >
<LinearLayout
android:id=“@+id/line1”
android:layout_width=“3dp”
android:background=“@color/red”
android:orientation=“vertical”
android:layout_marginTop=“14dp”
android:layout_marginStart=“8dp”
android:layout_centerVertical=“true”
android:layout_marginBottom=“20dp”
android:layout_height=“match_parent”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_toRightOf=“@+id/line1”
android:layout_centerVertical=“true”
android:layout_marginStart=“10dp”
android:textSize=“@dimen/textSize5”
android:text=“商家信息”/>
<RelativeLayout
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_below=“@+id/rl_organ_info”
android:layout_marginStart=“20dp”
android:layout_marginEnd=“20dp”>
<LinearLayout
android:id=“@+id/ll_organ_name”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”>
<TextView
android:id=“@+id/tv_organ_name”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“机构名称”
android:textSize=“@dimen/textSize8”
android:textStyle=“bold”
android:layout_gravity=“center_vertical”
<LinearLayout
android:id=“@+id/ll_user_name”
android:layout_below=“@+id/ll_organ_name”
android:layout_width=“wrap_content”
android:layout_marginTop=“5dp”
android:layout_height=“wrap_content”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“负责人:”
android:layout_gravity=“center_vertical”
<TextView
android:id=“@+id/tv_user_name”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“center_vertical”
android:layout_marginStart=“10dp”>
<LinearLayout
android:id=“@+id/ll_tel”
android:layout_below=“@+id/ll_user_name”
android:layout_width=“wrap_content”
android:layout_marginTop=“5dp”
android:layout_height=“wrap_content”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“电话:”
android:layout_gravity=“center_vertical”>
<TextView
android:id=“@+id/tv_tel”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“center_vertical”
android:layout_marginStart=“10dp”>
<LinearLayout
android:id=“@+id/ll_address”
android:layout_below=“@+id/ll_tel”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_marginTop=“5dp”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“地址:”
android:layout_gravity=“center_vertical”
<TextView
android:id=“@+id/tv_address”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“center_vertical”
android:layout_marginStart=“10dp”>
<RelativeLayout
android:id=“@+id/rl_03”
android:layout_marginTop=“10dp”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:paddingBottom=“10dp”
android:layout_below=“@+id/rl_02”
android:background=“@color/white”>
<RelativeLayout
android:id=“@+id/rl_course_info_head”
android:layout_width=“match_parent”
android:layout_height=“50dp” >
<LinearLayout
android:id=“@+id/line”
android:layout_width=“3dp”
android:background=“@color/red”
android:orientation=“vertical”
android:layout_marginTop=“14dp”
android:layout_marginStart=“8dp”
android:layout_centerVertical=“true”
android:layout_marginBottom=“20dp”
android:layout_height=“match_parent”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_toRightOf=“@+id/line”
android:layout_centerVertical=“true”
android:layout_marginStart=“10dp”
android:textSize=“@dimen/textSize5”
android:text=“课程信息”/>
<RelativeLayout
android:id=“@+id/rl_course_info_concept”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_below=“@+id/rl_course_info_head”>
<TextView
android:id=“@+id/tv_course_name”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_marginStart=“20dp”
android:textSize=“@dimen/textSize8”
android:textStyle=“bold”
android:text=“课程名称”>
<LinearLayout
android:id=“@+id/ll_category”
android:layout_below=“@+id/tv_course_name”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_marginStart=“20dp”
android:layout_marginTop=“5dp”
android:orientation=“horizontal”>
<TextView
android:id=“@+id/tv_category1”
最后
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里P7Android高级教程
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
e"
android:layout_marginStart=“10dp”
android:textSize=“@dimen/textSize5”
android:text=“课程信息”/>
<RelativeLayout
android:id=“@+id/rl_course_info_concept”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_below=“@+id/rl_course_info_head”>
<TextView
android:id=“@+id/tv_course_name”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:layout_marginStart=“20dp”
android:textSize=“@dimen/textSize8”
android:textStyle=“bold”
android:text=“课程名称”>
<LinearLayout
android:id=“@+id/ll_category”
android:layout_below=“@+id/tv_course_name”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_marginStart=“20dp”
android:layout_marginTop=“5dp”
android:orientation=“horizontal”>
<TextView
android:id=“@+id/tv_category1”
最后
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里P7Android高级教程
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
[外链图片转存中…(img-8ddFxmqI-1713621197046)]
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
[外链图片转存中…(img-nJjXB9vh-1713621197046)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-0WnpXTuX-1713621197047)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!