自学Android也有一段时间,总感觉学习方法不对,找到原因是因为没有总结,故今日起,将练习的项目总结来提高自己的能力。
在网上下载了《谷歌电子市场》,下面进行每部的总结。
前两天主要是搭建框架,感觉内容比较复杂,对于我这样的小新手来说,框架的搭建过程还是有些吃不透,故做个总结,来梳理逻辑。
项目开始
一.服务器的搭建:我采用的是将资源文件,放到Tomcat的文件夹下,直接启动服务器方式。
war包方式:
1. 把war放到tomact的`D:\java_web\apache-tomcat-7.0.54-windows-x64\apache-tomcat-7.0.54\webapps`目录下面就可以,然后启动tomcat会自动解压war包.
2. 修改`webapps\GooglePlayServer\WEB-INF\classes`目录下system.properties为`#dir=F:/课程/备课/google应用市场/day01/服务器`修改`WebInfos`所在的目录,需要注意要么用"/"或者"\\"
3. 启动tomcat,自动解压war包,并运行程序
4. 在pc和手机上分别验证
二.建立常见的类,以及常见的工具方法
首先将一些常用的包建好。
接下来,导入常用的工具类。
开始写第一个类,BaseApplication
这个类的作用: 定义一个全局的盒子,里边放置的对象,属性,方法都是全局可以调用
@Override
public void onCreate() {//程序的入口
//初始化一些常用的属性,然后放到盒子里
//上下文
mContext = getApplicationContext();
//主线程
mMainThread = Thread.currentThread();
//主线程Id
mMainThreadId = android.os.Process.myTid();
//Handler
mHandler = new Handler();
super.onCreate();
}
创建好了这个类,一定要记住在清单文件里配置!
之后,开始编写MainActivity
写之前,先把指示器的开源框架导入引用成库文件,PagerSlidingTabStrip。但是引入的这个框架,滑动的条,以及点击时候的文字颜色和文字大小的改动需要对源码进行修改。
先将对应的开源控件加到布局文件中,同时还有v4包下的viewpager。
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.yumutech.google.MainActivity" >
<include layout="@layout/title_bar" />
<com.astuetz.PagerSlidingTabStripExtends
xmlns:example="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_tabs"
android:layout_width="match_parent"
android:layout_height="48dp"
example:pstsIndicatorColor="@color/tab_indicator_selected"
example:pstsIndicatorHeight="5dp"
example:pstsSelectedTabTextColor="@color/tab_text_selected"
example:pstsSelectedTabTextSize="18sp"
example:pstsTabTextColor="@color/tab_text_normal"
example:pstsTabTextSize="16sp" >
</com.astuetz.PagerSlidingTabStripExtends>
<android.support.v4.view.ViewPager
android:id="@+id/main_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
</LinearLayout>
开源PagerSlidingTabStripg功能拓展
- 添加四个属性
这几个属性是添加到源码的res-values-attrs.xml中
<attr name="heimaTabTextSize" format="dimension" /> <attr name="heimaTabTextColor" format="color" /> <attr name="heimaSelectedTabTextSize" format="dimension" /> <attr name="heimaSelectedTabTextColor" format="color" />
*这部分是添加到源码java中
//修改源码
/—————add begin—————/
private int selectedPosition = 0;private int tabTextSize = 12; private int tabTextColor = 0xFF666666; private int selectedTabTextSize = 12; private int selectedTabTextColor = 0xFF666666; /**---------------add end---------------**/ /**---------------add begin---------------**/ tabTextSize = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_heimaTabTextSize, tabTextSize); tabTextColor = a.getColor(R.styleable.PagerSlidingTabStrip_heimaTabTextColor, tabTextColor); selectedTabTextSize = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_heimaSelectedTabTextSize, selectedTabTextSize); selectedTabTextColor = a.getColor(R.styleable.PagerSlidingTabStrip_heimaSelectedTabTextColor, selectedTabTextColor); /**---------------add end---------------**/
*这部分是增加点击选中后,文本颜色和大小的改变
/—————add begin—————/
if (i == selectedPosition) {
tab.setTextColor(selectedTabTextColor);
tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, selectedTabTextSize);
}
/—————add end—————/
/**---------------add begin---------------**/
selectedPosition = position;
updateTabStyles();
/**---------------add end---------------**/
之后再MainActivity中将对应的控件都找到。
之后开始给viewpager设置Adapter
这里我是用的是FragmentStatePagerAdapter
该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大量的内存。
而对创建Fragment,我是用的工厂模式创建的,因为工程模式的好处是可以缓存所有的fragment,通过滑动到相应位置去通过switch创建相应的fragment,而不必每次都去创建。
今天先写到这,宿舍要关门了。
哦了,刚到实验室打开电脑,先对昨天未完成的总结继续梳理逻辑。
对于FragmentStatePagerAdapter,需要Fragement来填充页面,这里我是用的是工厂模式,FragmentFactory
public static final int FRAGMENT_HOME = 0;
public static final int FRAGMENT_APP = 1;
public static final int FRAGMENT_GAME = 2;
public static final int FRAGMENT_SUBJECT = 3;
public static final int FRAGMENT_RECOMMEND = 4;
public static final int FRAGMENT_CATEGORY = 5;
public static final int FRAGMENT_HOT = 6;
public static Fragment getFragment(int position) {
Fragment fragment = null;
switch (position) {
case FRAGMENT_HOME:// 主页
fragment = new HomeFragment();
break;
case FRAGMENT_APP:// 应用
fragment = new AppFragment();
break;
case FRAGMENT_GAME:// 游戏
fragment = new GameFragment();
break;
case FRAGMENT_SUBJECT:// 专题
fragment = new SubjectFragment();
break;
case FRAGMENT_RECOMMEND:// 推荐
fragment = new RecommendFragment();
break;
case FRAGMENT_CATEGORY:// 分类
fragment = new CategoryFragment();
break;
case FRAGMENT_HOT:// 排行
fragment = new HotFragment();
break;
default:
break;
}
return fragment;
}
对于Adapter用到的数据源,这里我通过工具类获取提前放在资源文件下values-strings.xml中的数组。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">谷歌电子市场</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<!-- 主页 -->
<string-array name="main_titles">
<item>首页</item>
<item>应用</item>
<item>游戏</item>
<item>专题</item>
<item>推荐</item>
<item>分类</item>
<item>排行</item>
</string-array>
</resources>
有了这个数组,就能通过getCount方法获得Fragment的数量。
然后给ViewPager设置Adapter,再之后给指示器PagerSlidingTabStripExtends设置ViewPager
“`
/* 初始化Data /
private void initData() {
mMainTitles = UIUtils.getStringArr(R.array.main_titles);
MainFragmentStatePagerAdapter adapter = new MainFragmentStatePagerAdapter(
getSupportFragmentManager());
mViewpager.setAdapter(adapter);
mTabs.setViewPager(mViewpager);
}
```
这里由于我的真机的ActionBar的展示效果和模拟器上的不一样,所以我没用它,而是自己写了一个标题。此刻运行起来,效果是这样: