Android UI 模板设计之组合模式(2),学习指南

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

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

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

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

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

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

正文

import android.widget.Toast;

import androidx.annotation.RequiresApi;

/**

  • 顶部导航栏控件

  • 这是一个组合控件,由左右两个Button和一个TextView组成

*/

public class TopBar extends RelativeLayout {

// 步骤2:定义需要使用的控件

private Button leftButton , rightButton;

private TextView tvTitle;

// 步骤3:声明这些控件所需要使用的属性,即之前在 atts.xml 中定义的属性

// 左 Button 属性

private String leftText;

private int leftTextColor;

private Drawable leftBackground;

// 右 Button 属性

private String rightText;

private int rightTextColor;

private Drawable rightBackground;

// 中间 TextView 属性

private String title;

private int titleTextColor;

private float titleTextSize;

private LayoutParams leftParams,rightParams,titleParams;

private topbarClickListener listener;

public interface topbarClickListener{

void leftClick();

void rightClick();

}

public void setOnTopBarClickListener(topbarClickListener listener){

this.listener = listener;

}

// 不需要自定义属性的构造方法

public TopBar(Context context) {

super(context);

}

/**

  • 步骤1:添加构造方法

  •    需要自定义属性就使用这一个构造方法,使用atts参数
    
  • @param context

  • @param attrs

*/

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

public TopBar(final Context context, AttributeSet attrs) {

super(context, attrs);

// 步骤4:给声明好的属性赋值,以将属性和控件关联

// 4.1 通过TypedArray存储从xml文件中获取到的自定义属性的值,并赋给相应的变量

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar);

leftText = ta.getString(R.styleable.TopBar_leftText);

leftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor,0);

leftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground);

rightText = ta.getString(R.styleable.TopBar_rightText);

rightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor,0);

rightBackground = ta.getDrawable(R.styleable.TopBar_rightBackground);

title = ta.getString(R.styleable.TopBar_title);

titleTextSize = ta.getDimension(R.styleable.TopBar_titleTextSize,0);

titleTextColor = ta.getColor(R.styleable.TopBar_titleTextColor,0);

// 回收。1.避免浪费资源 2.避免由于缓存而引起的错误

ta.recycle();

// 4.2 实例化控件

leftButton = new Button(context);

rightButton = new Button(context);

tvTitle = new Button(context);

// 4.3 将属性值和控件关联

leftButton.setText(leftText);

leftButton.setTextColor(leftTextColor);

leftButton.setBackground(leftBackground);

rightButton.setText(rightText);

rightButton.setTextColor(rightTextColor);

rightButton.setBackground(rightBackground);

tvTitle.setText(title);

tvTitle.setTextSize(titleTextSize);

tvTitle.setTextColor(titleTextColor);

tvTitle.setGravity(Gravity.CENTER);

tvTitle.setBackgroundColor(Color.argb(0,0,0,0));

setBackgroundColor(0xFFF59563);

// 步骤5:将控件放到layout中,通过LayoutParams控制摆放方式

leftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);

leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);

addView(leftButton, leftParams);

rightParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);

rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);

addView(rightButton, rightParams);

titleParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.MATCH_PARENT);

titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);

addView(tvTitle, titleParams);

// 步骤6:动态控制 TopBar

leftButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

listener.leftClick();

}

});

rightButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

listener.rightClick();

}

});

}

/**

  • 是否显示左Button

  • @param flag

*/

public void setLeftIsVisable(boolean flag){

if(flag){

leftButton.setVisibility(View.VISIBLE);

}else {

leftButton.setVisibility(View.GONE);

}

}

}

第三步:使用

在Android Studio中引用一个第三方命名控件只要:添加xmlns:custom="http://schemas.android.com/apk/res-auto"即可

给重新引用的名字空间命名为custom,就可通过custom引用所有自定义的属性了

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:custom=“http://schemas.android.com/apk/res-auto”

xmlns:tools=“http://schemas.android.com/tools”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

tools:context=“.MainActivity”>

<com.lzw.topbar.TopBar

android:id=“@+id/topbar”

android:layout_width=“match_parent”

android:layout_height=“48dp”

custom:leftBackground=“#03A9F4”

custom:leftText=“Back”

custom:leftTextColor=“#E91E63”

custom:rightBackground=“#03A9F4”

custom:rightText=“More”

custom:rightTextColor=“#E91E63”

custom:title=“自定义标题”

custom:titleTextColor=“#123412”

custom:titleTextSize=“8sp”></com.lzw.topbar.TopBar>

2. 在MainActivity中使用TopBar

package com.lzw.topbar;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.Toast;

最后

上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。

也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。

我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料

部分文件:


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

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

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

roid时下热门知识点的学习资料**。

部分文件:
[外链图片转存中…(img-l3ZxwUh1-1713660516809)]
[外链图片转存中…(img-pMBYfLCa-1713660516810)]
[外链图片转存中…(img-1hweoNEI-1713660516810)]

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值