在ViewPager这种可以滑动的控件上,总是有很多的文章可以做。Android自带的控件,实现一个指示器,这个控件,就是support-v4包里面的PagerTabStrip控件。

首先,我们先看一下实现效果,大饱眼福。

可以看到,效果实现的也是很棒,比之前自定义的标签指示器更加的流畅。下面,简单介绍一下PagerTabStrip和它的使用。

PagerTabStrip是v4支持包里面的类,是ViewPager专用的类,不能在其他地方使用。在使用的时候,我们只需要在ViewPager的布局里面声明即可。

如下面的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@android:color/white"
  6. android:orientation="vertical" >
  7. <android.support.v4.view.ViewPager
  8. android:id="@+id/viewPager"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent" >
  11. <android.support.v4.view.PagerTabStrip
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_gravity="top"
  15. android:background="@android:color/holo_blue_light"
  16. android:textColor="@android:color/white" />
  17. </android.support.v4.view.ViewPager>
  18. </LinearLayout>

我们可以设置layout_gravity属性,比如top或者是bottom,来控制显示的位置。除此之外,不需要进行其他设置。

剩下的,就是我们需要在代码里面实现的了。

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import android.os.Bundle;
  4. import android.support.v4.app.Fragment;
  5. import android.support.v4.app.FragmentActivity;
  6. import android.support.v4.app.FragmentPagerAdapter;
  7. import android.support.v4.view.ViewPager;
  8. public class PagerTabStripActivity extends FragmentActivity {
  9. private List<Fragment> fragments;
  10. private ViewPager viewPager;
  11. private List<String> titleList;
  12. @Override
  13. public void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.main);
  16. initView();
  17. }
  18. private void initView() {
  19. viewPager = (ViewPager) findViewById(R.id.viewPager);
  20. titleList = new ArrayList<String>();
  21. titleList.add("最新推荐");
  22. titleList.add("游戏娱乐");
  23. titleList.add("影音视频");
  24. fragments = new ArrayList<Fragment>();
  25. fragments.add(new MyFragment(android.R.color.holo_green_light));
  26. fragments.add(new MyFragment(android.R.color.holo_orange_light));
  27. fragments.add(new MyFragment(android.R.color.holo_red_light));
  28. FragmentPagerAdapter adapter = new FragmentPagerAdapter(
  29. getSupportFragmentManager()) {
  30. @Override
  31. public int getCount() {
  32. return 3;
  33. }
  34. @Override
  35. public Fragment getItem(int position) {
  36. return fragments.get(position);
  37. }
  38. @Override
  39. public CharSequence getPageTitle(int position) {
  40. return titleList.get(position);
  41. }
  42. };
  43. viewPager.setAdapter(adapter);
  44. }
  45. }

在上面的代码里面,展现了我们如何控制标题的文字,我们只需要重写getPagerTitle方法即可。如果不想要下面的指示器,把PagerTabStrip换成PagerTitlestrip即可。可以把剩下的,就交给伟大的Android系统去做吧!

原文:http://blog.csdn.net/zhaokaiqiang1992/article/details/40323863?utm_source=tuicool&utm_medium=referral

前言:在前两篇文章中,我们讲解了滑动页面的的实现方法与四大函数的意义,但有时,仅仅实现页面滑动是不够的,还要有标题栏才会显得更友好。所以在这篇文章中,我将会向大家展示在Android.support.v4包中的两个控件PagerTabStrip与PagerTitleStrip,他们都是用来实现标题栏的,但各自有些不同,在这篇文章中,我们就讲讲它们各自都能实现怎样的功能,又有哪些异同点。

相关文章:

1、《ViewPager 详解(一)---基本入门》

2、《ViewPager 详解(二)---详解四大函数》

3、《ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同》

4、《ViewPager 详解(四)----自主实现滑动指示条》

5、《ViewPager 详解(五)-----使用Fragment实现ViewPager滑动》

一、PagerTitleStrip

先看个简单的,先上个效果图,吸引大家一下眼球。

三个页面间的滑动,此时是带着上面的标题一块滑动的。

  

看一下android 对于PagerTabStrip的官方解释:

Class Overview


PagerTitleStrip is a non-interactive indicator of the current, next, and previous pages of a ViewPager. It is intended to be used as a child view of a ViewPager widget in your XML layout. Add it as a child of a ViewPager in your layout file and set its android:layout_gravity to TOP or BOTTOM to pin it to the top or bottom of the ViewPager. The title from each page is supplied by the methodgetPageTitle(int) in the adapter supplied to the ViewPager.

For an interactive indicator, see PagerTabStrip.

翻译:

PagerTabStrip是ViewPager的一个关于当前页面、上一个页面和下一个页面的一个非交互的指示器。它经常作为ViewPager控件的一个子控件被被添加在XML布局文件中。在你的布局文件中,将它作为子控件添加在ViewPager中。而且要将它的 android:layout_gravity 属性设置为TOP或BOTTOM来将它显示在ViewPager的顶部或底部。每个页面的标题是通过适配器的getPageTitle(int)函数提供给ViewPager的。

我可能译的不大通顺,这里英文也难度不大,大家应该也能看得懂,但我还是着重讲两点:

1、首先,文中提到:在你的布局文件中,将它作为子控件添加在ViewPager中。

2、第二,标题的获取,是重写适配器的getPageTitle(int)函数来获取的。

根据这两点,我们就可以看代码了:

1、XML布局文件:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.example.testviewpage_2.MainActivity" >
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/viewpager"
  8. android:layout_width="wrap_content"
  9. android:layout_height="200dip"
  10. android:layout_gravity="center">
  11. <android.support.v4.view.PagerTitleStrip
  12. android:id="@+id/pagertitle"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_gravity="top"
  16. />
  17. </android.support.v4.view.ViewPager>
  18. </RelativeLayout>

清楚的看到我们将.PagerTitleStrip将其作为ViewPager的子控件直接嵌入其中;这是第一步;当然android:layout_gravity=""的值要设置为top或bottom。将标题栏显示在顶部或底部。

2、重写适配器的getPageTitle()函数

便于大家有个整体认识,先贴全局代码,然后再逐个讲,这段代码是在《ViewPager 详解(二)---详解四大函数》 直接更改来的,如果不太明白,先看看这篇文章。

  1. package com.example.testviewpage_2;
  2. /**
  3. * @author  harvic
  4. * @date 2014.8.12
  5. */
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import android.app.Activity;
  9. import android.os.Bundle;
  10. import android.support.v4.view.PagerAdapter;
  11. import android.support.v4.view.PagerTitleStrip;
  12. import android.support.v4.view.ViewPager;
  13. import android.view.LayoutInflater;
  14. import android.view.View;
  15. import android.view.ViewGroup;
  16. public class MainActivity extends Activity {
  17. private View view1, view2, view3;
  18. private List<View> viewList;// view数组
  19. private ViewPager viewPager; // 对应的viewPager
  20. private List<String> titleList;  //标题列表数组
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main);
  25. viewPager = (ViewPager) findViewById(R.id.viewpager);
  26. LayoutInflater inflater = getLayoutInflater();
  27. view1 = inflater.inflate(R.layout.layout1, null);
  28. view2 = inflater.inflate(R.layout.layout2, null);
  29. view3 = inflater.inflate(R.layout.layout3, null);
  30. viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
  31. viewList.add(view1);
  32. viewList.add(view2);
  33. viewList.add(view3);
  34. titleList = new ArrayList<String>();// 每个页面的Title数据
  35. titleList.add("王鹏");
  36. titleList.add("姜语");
  37. titleList.add("结婚");
  38. PagerAdapter pagerAdapter = new PagerAdapter() {
  39. @Override
  40. public boolean isViewFromObject(View arg0, Object arg1) {
  41. // TODO Auto-generated method stub
  42. //根据传来的key,找到view,判断与传来的参数View arg0是不是同一个视图
  43. return arg0 == viewList.get((int)Integer.parseInt(arg1.toString()));
  44. }
  45. @Override
  46. public int getCount() {
  47. // TODO Auto-generated method stub
  48. return viewList.size();
  49. }
  50. @Override
  51. public void destroyItem(ViewGroup container, int position,
  52. Object object) {
  53. // TODO Auto-generated method stub
  54. container.removeView(viewList.get(position));
  55. }
  56. @Override
  57. public Object instantiateItem(ViewGroup container, int position) {
  58. // TODO Auto-generated method stub
  59. container.addView(viewList.get(position));
  60. //把当前新增视图的位置(position)作为Key传过去
  61. return position;
  62. }
  63. @Override
  64. public CharSequence getPageTitle(int position) {
  65. // TODO Auto-generated method stub
  66. return titleList.get(position);
  67. }
  68. };
  69. viewPager.setAdapter(pagerAdapter);
  70. }
  71. }

相比较《ViewPager 详解(二)---详解四大函数》这里作了一点更改:

1、变量

  1. private List<String> titleList;  //标题列表数组

申请了一个String数组,用来存储三个页面所对应的标题的

2、初始化

  1. titleList = new ArrayList<String>();// 每个页面的Title数据
  2. titleList.add("王鹏");
  3. titleList.add("姜语");
  4. titleList.add("结婚");

在初始化阶段增加了这么一段初始化数组的代码。

3、重写CharSequence getPageTitle(int )函数

  1. @Override
  2. public CharSequence getPageTitle(int position) {
  3. // TODO Auto-generated method stub
  4. return titleList.get(position);
  5. }

根据位置返回当前所对应的标题。

大家可以看到,其实这里仅仅只重写了getPageTitle()函数,将其根据不同的位置返回不同的字符串就可以实现上面的标题栏功能。第一和第二步有关数组和初始化,其实都是这了这一步,其实我们完全可以用下面这个代码来取代它们:

  1. @Override
  2. public CharSequence getPageTitle(int position) {
  3. // TODO Auto-generated method stub
  4. switch (position) {
  5. case 0:
  6. return "王鹏";
  7. case 1:
  8. return "姜语";
  9. case 2:
  10. return "结婚";
  11. default:
  12. return "";
  13. }
  14. }

这样效果是一样一样的,只是代码不好维护而已。好了,有关PagerTabStrip的问题,我们就先说到这。

二、PagerTabStrip

同样,先看个PagerTabStrip做出来的效果是怎样的。

此例是以《ViewPager 详解(一)---基本入门》为基础,更改而成;

    

可能看不出太大区别,其实这两个实现的效果基本差不多,但有两点不同:

1、PagerTabStrip在当前页面下,会有一个下划线条来提示当前页面的Tab是哪个。

2、PagerTabStrip的Tab是可以点击的,当用户点击某一个Tab时,当前页面就会跳转到这个页面,而PagerTitleStrip则没这个功能。

同样,先看看官方对PagerTabStrip的解释:

Class Overview


PagerTabStrip is an interactive indicator of the current, next, and previous pages of a ViewPager. It is intended to be used as a child view of a ViewPager widget in your XML layout. Add it as a child of a ViewPager in your layout file and set its android:layout_gravity to TOP or BOTTOM to pin it to the top or bottom of the ViewPager. The title from each page is supplied by the methodgetPageTitle(int) in the adapter supplied to the ViewPager.

For a non-interactive indicator, see PagerTitleStrip.

翻译:

PagerTabStrip是ViewPager的一个关于当前页面、上一个页面和下一个页面的一个可交互的指示器。它经常作为ViewPager控件的一个子控件被被添加在XML布局文件中。在你的布局文件中,将它作为子控件添加在ViewPager中。而且要将它的 android:layout_gravity 属性设置为TOP或BOTTOM来将它显示在ViewPager的顶部或底部。每个页面的标题是通过适配器的getPageTitle(int)函数提供给ViewPager的。

可以看到,除了第一句以外的其它句与PagerTitleStrip的解释完全相同。即用法也是相同的。只是PagerTabStrip是可交互的,而PagerTitleStrip是不可交互的区别。对于区别在哪些位置,即是上面的两点(是否可点击与下划线指示条)。

 

用法与PagerTitleStrip完全相同,即:

1、首先,文中提到:在你的布局文件中,将它作为子控件添加在ViewPager中。

2、第二,标题的获取,是重写适配器的getPageTitle(int)函数来获取的。

看看实例:

1、XML布局

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.example.testviewpage_2.MainActivity" >
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/viewpager"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_gravity="center">
  11. <android.support.v4.view.PagerTabStrip
  12. android:id="@+id/pagertab"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:layout_gravity="top"/>
  16. </android.support.v4.view.ViewPager>
  17. </RelativeLayout>

可以看到,同样,是将PagerTabStrip作为ViewPager的一个子控件直接插入其中,当然android:layout_gravity=""的值一样要设置为top或bottom。

2、重写适配器的getPageTitle()函数

全部代码:

  1. package com.example.testviewpage_2;
  2. /**
  3. * @author  harvic
  4. * @date 2014.8.13
  5. */
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import android.app.Activity;
  9. import android.os.Bundle;
  10. import android.support.v4.view.PagerAdapter;
  11. import android.support.v4.view.ViewPager;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. public class MainActivity extends Activity {
  16. private View view1, view2, view3;
  17. private List<View> viewList;// view数组
  18. private ViewPager viewPager; // 对应的viewPager
  19. private List<String> titleList;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. viewPager = (ViewPager) findViewById(R.id.viewpager);
  25. LayoutInflater inflater = getLayoutInflater();
  26. view1 = inflater.inflate(R.layout.layout1, null);
  27. view2 = inflater.inflate(R.layout.layout2, null);
  28. view3 = inflater.inflate(R.layout.layout3, null);
  29. viewList = new ArrayList<View>();// 将要分页显示的View装入数组中
  30. viewList.add(view1);
  31. viewList.add(view2);
  32. viewList.add(view3);
  33. titleList = new ArrayList<String>();// 每个页面的Title数据
  34. titleList.add("王鹏");
  35. titleList.add("姜语");
  36. titleList.add("结婚");
  37. PagerAdapter pagerAdapter = new PagerAdapter() {
  38. @Override
  39. public boolean isViewFromObject(View arg0, Object arg1) {
  40. // TODO Auto-generated method stub
  41. return arg0 == arg1;
  42. }
  43. @Override
  44. public int getCount() {
  45. // TODO Auto-generated method stub
  46. return viewList.size();
  47. }
  48. @Override
  49. public void destroyItem(ViewGroup container, int position,
  50. Object object) {
  51. // TODO Auto-generated method stub
  52. container.removeView(viewList.get(position));
  53. }
  54. @Override
  55. public Object instantiateItem(ViewGroup container, int position) {
  56. // TODO Auto-generated method stub
  57. container.addView(viewList.get(position));
  58. return viewList.get(position);
  59. }
  60. @Override
  61. public CharSequence getPageTitle(int position) {
  62. return titleList.get(position);
  63. }
  64. };
  65. viewPager.setAdapter(pagerAdapter);
  66. }
  67. }

这里的代码与PagerTitleStrip的完全相同,就不再讲解了。

就这样,我们就讲完了有关PagerTabStrip的简单使用方法。下面讲一讲PagerTabStrip的扩展。

3、扩展:PagerTabStrip属性更改

在源码中,大家可以看到有个工程叫TestViewPage_PagerTabStrip_extension,运行一下,效果是这样的:

    

在上面两个图中可以看到,我更改了两个地方:

1、下划线颜色,原生是黑色,我变成了绿色;

2、在Tab标题前加了一个图片;

下面说说是如何更改的:

1、更改下划线颜色:

主要靠PagerTabStrip的setTabIndicatorColorResource方法;

代码如下:

  1. pagerTabStrip = (PagerTabStrip) findViewById(R.id.pagertab);
  2. pagerTabStrip.setTabIndicatorColorResource(R.color.green);

2、添加标题——重写适配器CharSequence getPageTitle(int)方法

在CharSequence getPageTitle(int position)方法返回值是,我们不返回String对象,而采用SpannableStringBuilder来构造了下包含图片的扩展String对像;

具体代码如下,不再细讲,大家可以看看SpannableStringBuilder的使用方法,就可理解了。

  1. @Override
  2. public CharSequence getPageTitle(int position) {
  3. SpannableStringBuilder ssb = new SpannableStringBuilder("  "+titleList.get(position)); // space added before text
  4. // for
  5. Drawable myDrawable = getResources().getDrawable(
  6. R.drawable.ic_launcher);
  7. myDrawable.setBounds(0, 0, myDrawable.getIntrinsicWidth(),
  8. myDrawable.getIntrinsicHeight());
  9. ImageSpan span = new ImageSpan(myDrawable,
  10. ImageSpan.ALIGN_BASELINE);
  11. ForegroundColorSpan fcs = new ForegroundColorSpan(Color.GREEN);// 字体颜色设置为绿色
  12. ssb.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);// 设置图标
  13. ssb.setSpan(fcs, 1, ssb.length(),
  14. Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);// 设置字体颜色
  15. ssb.setSpan(new RelativeSizeSpan(1.2f), 1, ssb.length(),
  16. Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  17. return ssb;
  18. }

三、总结

通过前面的讲解,我们应该清楚的认识到PagerTabStrip与PagerTitleStrip在添加标题栏的异同,但他们实现的标题栏效果很不好,不能指定一个页面一次显示一个,或者全部显示,而且标题还滑动。所以注定主流的App都没有用这个玩意的。所以这里也只是一个过渡,在开发中,我们也不建议使用这两个东东。

为什么无法改变PagerTabStrip的滑动特性,看这个贴子:《Fixed Tabs with android.support.v4.view.PagerTabStrip or ViewPagerIndicator》

参考文章:

《Android多屏滑动:ViewPager基础使用及PagerTabStrip先天缺陷(附源码)》

《android:修改PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色》

所有源码打包在一起,分为三个:

1、TestViewPage_pagerTitleStrip:pagerTitleStrip实现实例

2、TestViewPage_PagerTabStrip :PagerTabStrip实现实例

3、TestViewPage_PagerTabStrip_extension:PagerTabStrip的扩展实现

源码下载地址:http://download.csdn.net/detail/harvic880925/7747417

 

请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/38521865 谢谢!

Android界面实现----PagerTabStrip绚丽的滑动标签的更多相关文章

  1. 【Android界面实现】使用PagerTabStrip实现有滑动标签的Viewpager

    在ViewPager这样的能够滑动的控件上,总是有非常多的文章能够做.上次的文章,我们实现了一个自己定义的ViewPager的指示器,这篇文章,我们主要是想利用Android自带的控件,实现一个指示器 ...

  2. Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/18311877) 今天还是给大家带来自定义控件的编写,自定义一个Lis ...

  3. 【Android 界面效果25】android中include标签的使用

    在一个项目中我们可能会需要用到相同的布局设计,如果都写在一个xml文件中,代码显得很冗余,并且可读性也很差,所以我们可以把相同布局的代码单独写成一个模块,然后用到的时候可以通过<include ...

  4. 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果

    最近闲来无事,在网上寻找源代码看,突然发现了一个国内技术牛人开发的快速开发框架Andbase,花了一天时间研究了下源码和怎么使用,现将开发常见的侧滑栏和滑动标签页组合效果的使用介绍个大家,希望可以减少 ...

  5. android仿系统Launcher界面,实现分屏,左右滑动效果(ViewSwitcher)

    ViewSwitcher代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitche ...

  6. Android 界面滑动卡顿分析与解决方案(入门)

    Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...

  7. android 界面设计基本知识Ⅲ

    本章继续讲述在android界面设计中相关的知识点.介绍内容包括BroadcastReceiver(广播),Service(服务),Widget(小部件),WebView(网页加载控件). 1.Bro ...

  8. Android ViewPager初探:让页面滑动起来

    下一篇:<Android ViewPager再探:增加滑动指示条> ViewPager需要用到适配器PagerAAdapter,以下四个函数需要重写: instantiateItem(Vi ...

  9. Android:使用ViewPager实现左右滑动切换图片 (简单版)

    ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...

随机推荐

  1. php如何把文件上传到服务器上

    conn.php: <?php $id=mysql_connect('localhost','root','root'); mysql_select_db("db_database12 ...

  2. HP StorageWorks MSL2024 Tape Libraries - Tape library Error Codes

    Main error codes Error Code Description Details and Solution 80 Can not initialize bar code reader P ...

  3. [kuangbin带你飞]专题八 生成树 - 次小生成树部分

    百度了好多自学到了次小生成树 理解后其实也很简单 求最小生成树的办法目前遇到了两种 1 prim 记录下两点之间连线中的最长段 F[i][k] 之后枚举两点 若两点之间存在没有在最小生成树中的边 那么 ...

  4. HRBUST 1430 矩阵快速幂

    没错就是这道模板题我做了一个小时...我居然在看第一眼就认为是快速幂的情况下强行找了一发瞬时求出的规律 每个阶段有黑白两种 a[i].black=a[i-1].black*3+a[i].white   ...

  5. [Zz] DX depth buffer

    声明:本文完全翻译自DX SDK Documentation depth buffer,通常被称为z-buffer或者w-buffer,是设备的一个属性,用来存储深度信息,被D3D使用.当D3D渲染一 ...

  6. VR制作的规格分析

    因为UE4的演示资源更丰富一些,我这边把UE4的有代表性的演示都跑了一遍,同时也通过Rift确认效果,和里面的资源制作方式.   首先,UE4是基于物理渲染的引擎,大部分都是偏向图像真实的.使用的材质 ...

  7. Python浮点数控制小数精度

    将精度高的浮点数转换成精度低的浮点数. 1.round()内置方法 这个是使用最多的,刚看了round()的使用解释,也不是很容易懂.round()不是简单的四舍五入的处理方式. For the bu ...

  8. solr4.7中文分词器(ik-analyzer)配置

    solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器. 一.版本信息 solr版本:4.7.0 需 ...

  9. How to Write a Spelling Corrector

    http://norvig.com/spell-correct.html Feb 2007to August 2016 How to Write a Spelling Corrector One we ...

  10. 【转】Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticat

    Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticat 当m ...