TesterHome android app 编写历程(一)
来源:互联网 发布:win2008 80端口被占用 编辑:程序博客网 时间:2024/04/28 10:53
摘要
前段时间看到一个大神在Testerhome论坛里面上传了自己编写的TesterHome的代码,心里也就下定决定我应该也去试试看,作为android app测试工程师,对于android的一些东西至少还是需要了解的。看了下那位大神的一些代码,又看了他推荐的编写代码的规范,就按照上面的开始编写吧,所以后面写的一些内容,可能会有些内容是参考大神的代码的。
正文
下来今天我们需要完成的是一个TesterHome的界面,基本的界面情况如下:
看这个界面的话,大体就是4个Fragment接着再其中的一个fragment中再嵌套4个fragment就行了。话说的简单,我们还是来实现下比较好。
首先我们来实现底部的布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:background="#FFFFFF"> <LinearLayout android:id="@+id/id_community" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center" android:padding="2dp" > <com.saii.testerhome.views.TintableImageView android:id="@+id/id_community_img" android:layout_width="30dp" android:layout_height="30dp" android:padding="3dp" android:src="@drawable/tab_main_home" app:tint="@color/tab_item_tint_color"/> <TextView android:id="@+id/id_community_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="@string/community" android:textSize="15sp" android:textColor="#848484"/> </LinearLayout> <LinearLayout android:id="@+id/id_topic" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center" android:padding="2dp" > <com.saii.testerhome.views.TintableImageView android:id="@+id/id_topic_img" android:layout_width="30dp" android:layout_height="30dp" android:padding="3dp" android:src="@drawable/tab_main_topic" app:tint="@color/tab_item_tint_color"/> <TextView android:id="@+id/id_topic_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="@string/topic" android:textSize="15sp" android:textColor="#848484"/> </LinearLayout> <LinearLayout android:id="@+id/id_job" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center" android:padding="2dp" > <com.saii.testerhome.views.TintableImageView android:id="@+id/id_job_img" android:layout_width="30dp" android:layout_height="30dp" android:padding="3dp" android:src="@drawable/tab_main_job" app:tint="@color/tab_item_tint_color"/> <TextView android:id="@+id/id_job_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="@string/job" android:textSize="15sp" android:textColor="#848484"/> </LinearLayout> <LinearLayout android:id="@+id/id_my" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center" android:padding="2dp" > <com.saii.testerhome.views.TintableImageView android:id="@+id/id_my_img" android:layout_width="30dp" android:layout_height="30dp" android:padding="3dp" android:src="@drawable/tab_main_my" app:tint="@color/tab_item_tint_color"/> <TextView android:id="@+id/id_my_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="@string/my" android:textSize="12sp" android:textColor="#848484"/> </LinearLayout></LinearLayout>
底部的布局实际上不太难,就是4个linearylayout实现的。
再来就是绑定linearyLayout的点击事件,并且在点击的时候,显示对应的fragment.代码如下:
FragmentManager fm = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fm.beginTransaction();hideAllFragment(fragmentTransaction);switch (index){ case Config.COMMUNITYFRAGMENT: communityImage.setSelected(true); communityTextView.setTextColor(getResources().getColor(R.color.tab_item_tint_focused)); if (communityFragment==null){ communityFragment = new CommunityFragment(); fragmentTransaction.add(R.id.id_content,communityFragment); } fragmentTransaction.show(communityFragment); break; case Config.TOPICFRAGMENT: topicImage.setSelected(true); topicTextView.setTextColor(getResources().getColor(R.color.tab_item_tint_focused)); if (topicFragment==null){ topicFragment = new TopicFragment(); fragmentTransaction.add(R.id.id_content,topicFragment); } fragmentTransaction.show(topicFragment); break; case Config.JOBFRAGMENT: jobImage.setSelected(true); jobTextView.setTextColor(getResources().getColor(R.color.tab_item_tint_focused)); if (jobFragment==null){ jobFragment = new JobFragment(); fragmentTransaction.add(R.id.id_content,jobFragment); } fragmentTransaction.show(jobFragment); break; case Config.MYFRAGMENT: myImage.setSelected(true); myTextView.setTextColor(getResources().getColor(R.color.tab_item_tint_focused)); if (myFragment==null){ myFragment = new MyFragment(); fragmentTransaction.add(R.id.id_content,myFragment); } fragmentTransaction.show(myFragment); break;}fragmentTransaction.commit();
通过fragment管理器获取到fragment的事务,接着就是判断每个fragment是否为null如果为空则实例化出来,加入到事务中并且让其显示出来。
这样子我们就完成了底部按钮与Fragment的关联了,下来的话我们需要实现顶部的最新,最热按钮,并且还需要它关联viewpager 进行手势滑动。
这里我们采用了第三方的一个开源库ViewPagerIndicator使用它方便了很多的工作。
首先还是一样 我们先将主要的布局准备好。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <com.viewpagerindicator.TabPageIndicator android:id="@+id/id_indicator" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/id_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /></LinearLayout>
这里只需要声明一个TabPagerIndicator以及一个viewpager就可以了。
下来就是在我们声明的一个fragment中实现indicator与viewpager的绑定等等了。
因为Viewpager都需要一个适配器 所以我们这里先申明一个适配器
class TabPageIndicatorAdapter extends FragmentPagerAdapter{ public TabPageIndicatorAdapter(FragmentManager fm){ super(fm); } //这里面的bundle只是为了测试 所以传递了按钮的名称进去 @Override public Fragment getItem(int position) { Fragment fragment = new CommunityItemFragment(); Bundle bundle = new Bundle(); bundle.putString("key",TITLE[position]); fragment.setArguments(bundle); return fragment; } //返回每个按钮的名称 @Override public CharSequence getPageTitle(int position) { return TITLE[position%TITLE.length]; } @Override public int getCount() { return TITLE.length; } }
再来就是绑定viewpager 以及adpter还有就是indicator与viewpager的绑定
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_community,container,false); viewPager = (ViewPager)view.findViewById(R.id.id_viewpager); tabPageIndicatorAdapter = new TabPageIndicatorAdapter(getFragmentManager()); viewPager.setAdapter(tabPageIndicatorAdapter); tabPageIndicator = (TabPageIndicator)view.findViewById(R.id.id_indicator); tabPageIndicator.setViewPager(viewPager); tabPageIndicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {// Toast.makeText(getActivity(), TITLE[position], Toast.LENGTH_SHORT).show(); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); return view; }
最后还需要加上style.xml
<style name="StyledIndicators" parent="@android:style/Theme.Light"> <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> </style> <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator"> <item name="android:background">@drawable/tab_indicator</item> <item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item> <item name="android:textSize">15sp</item> <item name="android:dividerPadding">8dp</item> <item name="android:showDividers">middle</item> <item name="android:paddingLeft">10dp</item> <item name="android:paddingRight">10dp</item> <item name="android:fadingEdge">horizontal</item> <item name="android:fadingEdgeLength">8dp</item> </style> <style name="CustomTabPageIndicator.Text" parent="android:TextAppearance.Medium"> <item name="android:typeface">monospace</item> </style>
在androidManifest.xml中设置对应的主题就ok了。
最终的效果如下
- TesterHome android app 编写历程(一)
- TesterHome android app 编写历程(二)
- TesterHome android app 编写历程(三)
- TesterHome android app 编写历程(四)
- TesterHome android app 编写历程(六)
- TesterHome android app 编写历程(五)
- testerhome
- Android retrofit历程(一)
- Android开发历程(一) hello world
- Android 学习历程摘要(一)
- Android 重构历程(一)
- Android驱动(一)硬件访问服务学习之(四)Android应用程序APP编写
- Android百度地图开发一学习历程(一)
- Android---App Widget(一)
- (一)、android各个版本的发展历程
- 一只大二狗的Android历程--国际化(作业)
- 我的航拍直升机 控制基站软件的编写历程(一)
- 网页编程自学历程一:编写一个静态网页框架
- Android 4.4以上(改变状态栏的背景颜色)开源工程推荐
- 浇花问题
- 各种LG的5.0.1的root方法(VS985 24B亲测通过)
- 绝逼实用又美观的指南针应用(App)
- Tutorial #Facebook Relay文档翻译#
- TesterHome android app 编写历程(一)
- 读取网络中的数据并写入数据库
- Python抓取新闻标题和链接
- iOS 开发中实现打电话功能实用代码
- iOS大典之点击旋转, 点击停止
- 黑马程序员----C 语言学习笔记之位运算符
- Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结
- 知识复习(LDT+TSS+GATE+INTERRUPT)
- 在Eclipse中添加Servlet-api.jar的方法