尾声
你不踏出去一步,永远不知道自己潜力有多大,千万别被这个社会套在我们身上的枷锁给捆住了,30岁我不怕,35岁我一样不怕,去做自己想做的事,为自己拼一把吧!不试试怎么知道你不行呢?
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-
<FrameLayout
-
android:layout_width=“fill_parent”
-
android:layout_height=“fill_parent”
-
android:id=“@android:id/tabcontent”
-
android:layout_weight=“1”
-
>
-
</FrameLayout>
-
<TabWidget
-
android:layout_width=“fill_parent”
-
android:layout_height=“50dip”
-
android:id=“@android:id/tabs”
-
android:layout_alignBottom = “@android:id/tabcontent”
-
/>
-
</RelativeLayout>
-
</TabHost>
以上xml代码可以通用哈,FrameLayout里用来放内容的,Tab的xml基本结构就这样搭好了,
第二步:接下来就是往Activity里面写点东东了,这个Activity必须要继承下TabActivity,要不然就算你setContentView了上面那个xml也没法通过getTabHost()获得布局中的tabHost。
然后通过getTabHost得到TabHost对象。我这里打算建立四个选项卡,newTabSpec 这是为你的每一个选项卡上面打上一个Tag,也就是标记标记而已,特殊情况下你可以通过这个来查找到你的选项卡。setIndicator就是在你的选项卡上设置一些内容,至于什么内容,你懂的,要么是文字,要么是图片,要么就是文字加图片,当然有时候复杂的话还会写上布局文件。我这里就放上一个图片吧,然后这个图片加上一些特效,懒得在xml写什么布局了,直接在代码写了,返回的是一个View对象,废话有点多,直接看代码吧
private class TabView extends LinearLayout {
-
ImageView imageView ;
-
public TabView(Context c, int drawable, int drawableselec) {
-
super©;
-
imageView = new ImageView©;
-
StateListDrawable listDrawable = new StateListDrawable();
-
listDrawable.addState(SELECTED_STATE_SET, this.getResources()
-
.getDrawable(drawableselec));
-
listDrawable.addState(ENABLED_STATE_SET, this.getResources()
-
.getDrawable(drawable));
-
imageView.setImageDrawable(listDrawable);
-
imageView.setBackgroundColor(Color.TRANSPARENT);
-
setGravity(Gravity.CENTER);
-
addView(imageView);
-
}
上面的代码也就是自定义的一个View吧。
下面这个就是构建选项卡以及内容(选中的是第二个选项卡),我这里就把每个不同的选项卡内容分别放在不同的Activity里面,然后通过Tab来将这些Activity合并在一起,这样显得比较有层次感。
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
requestWindowFeature(Window.FEATURE_NO_TITLE);
-
setContentView(R.layout.main_tab);
-
TabHost tabHost=getTabHost();
-
TabView view = null;
-
// 最近联系人
-
view = new TabView(this, R.drawable.bg_tab_dial_normal, R.drawable.bg_tab_dial_normal);
-
view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));
-
TabSpec recentContactSpec=tabHost.newTabSpec(“RecentContact”);
-
recentContactSpec.setIndicator(view);
-
Intent recentContactIntent = new Intent(this, RecentContactActivity.class);
-
recentContactSpec.setContent(recentContactIntent);
-
// 联系人
-
view = new TabView(this, R.drawable.bg_tab_contact_normal, R.drawable.bg_tab_contact_normal);
-
view.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.selecttabbackground));
-
TabSpec contactBookSpec=tabHost.newTabSpec(“ContactBook”);
-
contactBookSpec.setIndicator(view);
-
Intent contactBookIntent = new Intent(this,ContactBookActivity.class);
-
contactBookSpec.setContent(contactBookIntent);
学习宝典
对我们开发者来说,一定要打好基础,随时准备战斗。不论寒冬是否到来,都要把自己的技术做精做深。虽然目前移动端的招聘量确实变少了,但中高端的职位还是很多的,这说明行业只是变得成熟规范起来了。竞争越激烈,产品质量与留存就变得更加重要,我们进入了技术赋能业务的时代。
不论遇到什么困难,都不应该成为我们放弃的理由!
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典!包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!