Android --- 倒计时(个人笔记记录),面试必问知识点及答案

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

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> result = new Result<>();

Type type1 = new TypeToken<Result<List>>() {}.getType();

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”

最后

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

阿里P7Android高级教程

下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。

Android核心高级技术PDF资料,BAT大厂面试真题解析;

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事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”

最后

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

阿里P7Android高级教程

下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

[外链图片转存中…(img-8ddFxmqI-1713621197046)]

附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。

Android核心高级技术PDF资料,BAT大厂面试真题解析;
[外链图片转存中…(img-nJjXB9vh-1713621197046)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-0WnpXTuX-1713621197047)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值