电子市场总结(一)

电子市场项目总结(一)

1. 自定义Application

为什么自定义Application

1.使用XUtils3.0 需要在Application中初始化

x.Ext.init(this);

2.抽取Context对象共全局使用,并获取Application所在的线程id(主线程ID,非进程),和全局的Handler对象。
在onCreate中去获取这些:

mContext = getApplicationContext();
mTid = Process.myTid();
mHandler = new Handler();

2. 自定义UIUtils

1.为什么要自定义UIUtils?
自定义UIUtils将那些常用的方法都封装起来,方便使用
2.定义了哪些
//--------------------------单位转换-----------------------
// dp转px
public static int dip2px(float dip) {
    float density = getResources().getDisplayMetrics().density;
    return (int) (dip * density + 0.5f);
}
// px转dp
public static int px2dip(float px) {
    float density = getResources().getDisplayMetrics().density;
    return (int) (px / density + 0.5f);
}

//----------------------普通的管理器获取-----------------------
// 获取资源管理器
public static Resources getResources() {
    return MyApplication.getContext().getResources();
}
// 获取全局Handler
public static Handler getHandler() {
    return MyApplication.getHandler();
}
// 获取主线程的ID
public static int getMainTid() {
    return MyApplication.getTid();
}
// 获取资源asset管理器
public static AssetManager getAssets() {
    return getResources().getAssets();
}

//------------------运行一个子线线程---------------------------
// 运行一个runnable
public static void runOnUiThread(Runnable runnable) {
    // 先检测是否在主线程被调用
    if (isMainThread()) {
        runnable.run();
    }else{
        getHandler().post(runnable);
    }
}

// 是否运行在主线程
public static boolean isMainThread() {
    return getMainTid() == Process.myTid();
}

3. 主界面的构建 MainActivity

构建成什么样的主界面?
使用V4包下的DrawerLayout作为根布局,呈现侧边栏的形式,内容使用Indicate和Viewpager组成

视图如下:

如何构建的Activity
采用继承自AppCompatActivity的Activity同时使用了 Theme.AppCompat.Light.DarkActionBar主题
使用DrawerLayout、PagerTab和ViewPager结合
因为使用的自定义控件PagerTab需要一个继承自ActionBarActivity的对象,
AppCompatActivity是V7包下ActionBarActivity的替代者,其采用的ToolBar也是ActionBar的替代者。
使用到的技术点

1.Xutils3.0的使用 View注入
x.view().inject(this);区别于2.0的ViewInject.inject(this);
从使用者的角度看,xutils3.0让工具变得全局化,不需要在使用之前再new一个出来,例如BitmapUtil的改变

2.使用FragmentPagerAdapter在viewpager中填充Fragment
class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    // 1.需要一个FragmentManager管理器,这个管理器应当是supportFragmentManager因为他可以版本兼容
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    // 2.获取item对象,采用工厂模式生产出对应的且唯一的Fragment
    public Fragment getItem(int position) {
        BaseFragment fragment = FragmentFactory.getFragment(position);
        fragment.loading();
        return fragment;
    }

    // 3.使用Indicator时大都需要adapter中提供获取标题的方式,以便指示器自动获取标题
    @Override
    public CharSequence getPageTitle(int position) {
        return mStringArray[position];
    }

    // 4.获取整个fragment的全部个数
    public int getCount() {
        return mStringArray.length;
    }

    // 5.默认返回的是POSITION_UNCHANGE,他表示该item不会重新加载
    // 对于多页面的展示,同时我们需要页面去刷新,在此我们返回的是position_none
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    // 6.返回POSITION_NONE是一种刷新fragment的方法,但是其造成资源浪费,因为每次都要将页面都重新加载,我们可以只加载有需要的页面,见下方链接
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }
}

ViewPager刷新单个页面的方法:http://lovelease.iteye.com/blog/2107296

在此我们需要了解 “FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别”,详情可以看看详解:http://blog.csdn.net/hknock/article/details/46741573

3.使用简单工厂模式来获取fragment
将fragment存储在集合中,根据viewpager中的position来获取对应的fragment,同时需要保证fragment的唯一性不被重复创建。

4.在viewpager的getViewTreeObserver中添加addOnGlobalLayoutListener监听,当页面整个布局构建完毕后,去设置当前的viewpager展示第一页
FragmentFactory.getFragment(0).loading();

5.将所使用的Fragment的进行封装,统一提供loading()方法进行加载。

ToolBar的使用
1.构建ToolBar

ActionBar已经被ToolBar所替代,如果一个普通的Activity没有继承AppCompatActivity使用方法详情见:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2006.html
事实上ToolBar与ActionBar不同,ToolBar是一个继承自View的控件,ActionBar则是继承自Object的抽象类。具体用法有待学习!

使用自带ToolBar的Activity需要两个设置:


  1. Activity继承自AppCompatActivity
  2. 主题风格设置为

Theme.AppCompat.Light.DarkActionBar”
@color/colorPrimary
@color/colorPrimaryDark
@color/colorAccent

2.DrawerLayout的使用

Drawerlayout的简单使用
对应布局文件中,将DrawerLayout作为根布局将主布局include进来,DrawerLayout中一定要有一个具有android:layout_gravity="left"属性的控件,作为侧边栏布局。可以将一个FrameLayout设置为侧边栏然后include(NavigationMenuView可以用来做侧边栏,也是as推荐的方案)

3.DrawerLayout和ToolBar的结合(ActionBarDrawerToggle)

为了实现点击效果如下:

需要将ToolBar和DrawerLayout关联起来,具体代码如下:

ActionBar supportActionBar = getSupportActionBar();// 获取自带supportactionbar
supportActionBar.setDisplayShowHomeEnabled(true); // 设置标题可点击
supportActionBar.setDisplayHomeAsUpEnabled(true); // 显示标题旁边的图片(默认是返回箭头图标)
supportActionBar.setLogo(R.drawable.ic_drawer_am);// 设置了似乎会被下面的代码抵消
DrawerLayout dl_drawer_layout =(DrawerLayout) findViewById(R.id.dl_drawer_layout); // 找到自己的DrawerLayout
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, dl_drawer_layout, R.string.navigation_drawer_open, R.string.navigation_drawer_close); // 用于关联的开关
mActionBarDrawerToggle.syncState(); // 配置完毕后将开关进行关联
// 监听ActionBar的点击事件
public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    switch (itemId) {
        case android.R.id.home:
            // 通过开关来打开关闭侧边栏
            mActionBarDrawerToggle.onOptionsItemSelected(item);
            break;
    }
    return super.onOptionsItemSelected(item);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值