小菜鸟起跑-对模仿《谷歌电子市场》项目前两天的总结(一)

自学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的展示效果和模拟器上的不一样,所以我没用它,而是自己写了一个标题。此刻运行起来,效果是这样:

运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_Boss_Hao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值