字母列表快速搜索控件


public class LetterSortView extends View
{
    
    /**
     * 触摸监听
     */
    private OnTouchLetterChangedListener mOnTouchLetterChangedListener;
    
    /**
     * 字母顺序
     */
    private static final String[] LETTERS = { "A", "B", "C", "D", "E", "F",
            "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
            "T", "U", "V", "W", "X", "Y", "Z" };
    
    /**
     * 当前索引位置
     */
    private int mChoose = -1;
    
    /**
     * 画笔
     */
    private Paint mPaint = new Paint();
    
    /**
     * 是否显示背景
     */
    private boolean mShowBkg = false;
    
    /**
     * 构造函数
     * 
     * @param context
     *            上下文
     * @param attrs
     *            xml中属性
     * @param defStyle
     *            风格
     */
    public LetterSortView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }
    
    /**
     * 构造函数
     * 
     * @param context
     *            上下文
     * @param attrs
     *            xml中属性
     * 
     */
    public LetterSortView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }
    
    /**
     * 构造函数
     * 
     * @param context
     *            上下文
     */
    public LetterSortView(Context context)
    {
        super(context);
    }
    
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        /*if (mShowBkg)
        {
            canvas.drawColor(Color.parseColor("#40000000"));
        }*/
        
        int height = getHeight();
        int width = getWidth();
        int singleHeight = height / LETTERS.length;
        for (int i = 0; i < LETTERS.length; i++)
        {
            //mPaint.setColor(Color.WHITE);
            mPaint.setColor(Color.parseColor("#5e5b6f"));
            mPaint.setTextSize(22.0f);
            mPaint.setTypeface(Typeface.DEFAULT_BOLD);
            mPaint.setAntiAlias(true);
            if (i == mChoose)
            {
                mPaint.setColor(Color.parseColor("#3399ff"));
                mPaint.setFakeBoldText(true);
            }
            float xPos = width / 2 - mPaint.measureText(LETTERS[i]) / 2 - 3.5f;
            float yPos = singleHeight * i + singleHeight;
            canvas.drawText(LETTERS[i], xPos, yPos, mPaint);
            mPaint.reset();
        }
        
    }
    
    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        setBackgroundResource(R.drawable.bm_friendtab_searchbg);
        final int action = event.getAction();
        final float y = event.getY();
        final int oldmChoose = mChoose;
        final OnTouchLetterChangedListener listener = mOnTouchLetterChangedListener;
        final int c = (int) (y / getHeight() * LETTERS.length);
        
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                mShowBkg = true;
                if (oldmChoose != c && listener != null)
                {
                    if (c >= 0 && c < LETTERS.length)
                    {
                        listener.onTouchingLetterChanged(LETTERS[c]);
                        mChoose = c;
                        invalidate();
                    }
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (oldmChoose != c && listener != null)
                {
                    if (c >= 0 && c < LETTERS.length)
                    {
                        listener.onTouchingLetterChanged(LETTERS[c]);
                        mChoose = c;
                        invalidate();
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                mShowBkg = false;
                mChoose = -1;
                invalidate();
                setBackgroundDrawable(null);
                break;
            default:
                break;
        }
        return true;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        return super.onTouchEvent(event);
    }
    
    /**
     * 设置字母改变时候的监听器 <功能详细描述>
     * 
     * @param onTouchingLetterChangedListener
     *            监听器
     * @see [类、类#方法、类#成员]
     */
    public void setOnTouchLetterChangedListener(
            OnTouchLetterChangedListener onTouchingLetterChangedListener)
    {
        this.mOnTouchLetterChangedListener = onTouchingLetterChangedListener;
    }
    
    /**
     * 
     * 字母改变时候的接口 <功能详细描述>
     * 
     * @see [相关类/方法]
     * @since [产品/模块版本]
     */
    public interface OnTouchLetterChangedListener
    {
        /**
         * 改变字母时的触发动作 <功能详细描述>
         * 
         * @param string
         *            字母
         * @see [类、类#方法、类#成员]
         */
        public void onTouchingLetterChanged(String string);
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、按字母检索插件简介:     让现有的phpcms2007的下载模块拥有按字母检索软件的功能,支持软件字母导航文件链接。 二、运行环境: 1、首先保证phpcms2007sp4(gbk)版本能够正常运行 2、linux/unix主机还需要设置相关路径的访问权限 三、安装说明: 1、首先备份你的phpcms中的以下文件,标注[新增]除外: /down/letter.php    [新增] /module/down/contribute.inc.php    (1) /module/down/letter.inc.php    [新增] /module/down/myitem.inc.php    (2) /module/down/search.inc.php    (3) /module/down/admin/down_add.inc.php    (4) /module/down/admin/down_edit.inc.php    (5) /module/down/admin/tag.inc.php    (6) /module/down/admin/templates/down_add.tpl.php    (7) /module/down/admin/templates/down_edit.tpl.php    (8) /module/down/admin/templates/tag_down_list_add.tpl.php    (9) /module/down/admin/templates/tag_down_list_copy.tpl.php    (10) /module/down/admin/templates/tag_down_list_edit.tpl.php    (11) /module/down/copy/letter.php    [新增] /module/down/include/tag.func.php    (12) /module/down/include/mysql/phpcms_down.sql    (13) /module/down/install/extension.php    (14) /templates/default/tags.php    (15) /templates/default/down/category.html    (21) /templates/default/down/category_list.html    (21) /templates/default/down/content.html    (21) /templates/default/down/contribute.html    (21) /templates/default/down/header.html    [新增] /templates/default/down/index.html    (16)(21) /templates/default/down/letter.html    [新增] /templates/default/down/letter_list.html    [新增] /templates/default/down/myitem.html    (17)(21) /templates/default/down/search.html    (18)(21) /templates/default/down/special_index.html    (21) /templates/default/down/special_list.html    (21) /templates/default/down/special_show.html    (21) /templates/default/down/tags_config.php    (19) /templates/default/down/templatenames.php    (20) /templates/default/down/type.html    (21) /templates/default/down/type_list.html    (21) 2、将解压缩后的文件覆盖系统中原来的相应文件。即将该目录下的除了本文件之外的所有文件和目录上传到你的phpcms安装路径。共有以下几个文件: /down/letter.php    [新增] /module/down/contribute.inc.php    (1) /module/down/letter.inc.php    [新增] /module/down/myitem.inc.php    (2) /module/down/search.inc.php    (3) /module/down/admin/down_add.inc.php    (4) /module/down/admin/down_edit.inc.php    (5) /module/down/admin/tag.inc.php    (6) /module/down/admin/templates/down_add.tpl.php    (7) /module/down/admin/templates/down_edit.tpl.php    (8) /module/down/admin/templates/tag_down_list_add.tpl.php    (9) /module/down/admin/templates/tag_down_list_copy.tpl.php    (10) /module/down/admin/templates/tag_down_list_edit.tpl.php    (11) /module/down/copy/letter.php    [新增] /module/down/include/tag.func.php    (12) /module/down/include/mysql/phpcms_down.sql    (13) /module/down/install/extension.php    (14) /templates/default/tags.php    (15) /templates/default/down/category.html    (21) /templates/default/down/category_list.html    (21) /templates/default/down/content.html    (21) /templates/default/down/contribute.html    (21) /templates/default/down/header.html    [新增] /templates/default/down/index.html    (16)(21) /templates/default/down/letter.html    [新增] /templates/default/down/letter_list.html    [新增] /templates/default/down/myitem.html    (17)(21) /templates/default/down/search.html    (18)(21) /templates/default/down/special_index.html    (21) /templates/default/down/special_list.html    (21) /templates/default/down/special_show.html    (21) /templates/default/down/tags_config.php    (19) /templates/default/down/templatenames.php    (20) /templates/default/down/type.html    (21) /templates/default/down/type_list.html    (21) /data/templatescache/down_header.tpl.php    [新增] /data/templatescache/down_index.tpl.php /data/templatescache/down_letter.tpl.php    [新增] /data/templatescache/down_letter_list.tpl.php    [新增] /data/templatescache/down_myitem.tpl.php     在此特别提醒你,如果你曾经修改过模板,一定不要轻易覆盖这些模板文件!在后面的第五部分中有专门写明,怎样修改模板。因此,如果想添加到你自己已经修改过的模板中,请参考本程序包中给出的模板文件和下面的说明,自行修改。 3、执行SQL语句: ALTER TABLE `表前缀_down_3` ADD `letter` VARCHAR( 1 ) NOT NULL AFTER `typeid` ; 复制代码 例如: 假设你的表前缀是默认的phpcms的话,而且你的下载频道为3,运行 ALTER TABLE `phpcms_down_3` ADD `letter` VARCHAR( 1 ) NOT NULL AFTER `typeid` ; 复制代码 将在该数据表的“typeid”字段后新增一个字段“letter”,用来表示该标题的首字母。     注意上面的表前缀改成你实际的数据表的前缀。默认应该是"phpcms_"。如果不清楚,请查看config.inc.php中的 $CONFIG['tablepre'] = 'phpcms_';  //数据表前缀 复制代码 可以使用phpcms的数据维护中的SQL执行,或者使用phpmyadmin执行这段SQL语句。     到此,此插件就安装好了。现在的任务就是更新所有已经生成的静态页面,从而让下载频道支持字母检索功能。 四、使用说明: 1、现在,进入下载频道的里面管理下载,编辑另一下载,就会发现多了一个“程序会自动添加标题的第一个字符”选项, 2、点击“确定”后,再点击“编辑”就可看到该则下载已自动添加了首字母进入选项了。 3、返回下载频道的浏览界面,选择“按字母浏览”,即可看到所有按字母检索的软件列表,相应单击一个字母,即可进入以该字母为首的软件列表
### 回答1: VB是Visual Basic的缩写,是一种面向对象的程序设计语言。VB具有简单易学、开发效率高的特点,被广泛应用于Windows平台的软件开发。VB通过首写字母搜索中文可能是指在VB编程中对中文字符进行搜索。 在VB中,我们可以使用字符串的IndexOf方法来进行搜索。通过该方法,我们可以查找指定字符串中某个子字符串第一次出现的位置。在中文字符串中,每个中文字符占据两个字节,因此需要进行一些特殊处理。 首先,我们需要将中文字符串和搜索字符都转换为字节数组。然后,使用循环遍历字节数组,逐个比较是否与搜索字符相等。如果找到对应的字符,就返回当前位置。 以下是一个简单的示例代码: ```vb Public Function SearchChineseCharacter(source As String, search As String) As Integer Dim sourceBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(source) Dim searchBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(search) Dim foundIndex As Integer = -1 For i As Integer = 0 To sourceBytes.Length - searchBytes.Length Dim match As Boolean = True For j As Integer = 0 To searchBytes.Length - 1 If sourceBytes(i + j) <> searchBytes(j) Then match = False Exit For End If Next If match Then foundIndex = i Exit For End If Next Return foundIndex End Function ``` 这个函数接受两个参数,source是要搜索的中文字符串,search是要查找的中文字符。返回的是搜索字符在源字符串中的位置索引(索引从0开始),若未找到则返回-1。 需要注意的是,在使用该函数时,应确保源字符串和搜索字符都是合法的中文字符。另外,该函数只能找到第一次出现搜索字符的位置,如果要找到所有出现的位置,则需要稍作修改。 ### 回答2: VB是Visual Basic的缩写,它是一种编程语言,主要用于Windows操作系统的软件开发。VB以简单易学、快速开发和可视化编程为特点,被广泛应用于企业级应用程序的开发。 VB是通过首写字母搜索中文的话,我认为这可能是指通过字母V和B来搜索与中文有关的信息。在这种情况下,我可以使用字母V和B为关键词进行搜索,以获得与中文相关的结果。搜索可能会包括与VB编程语言的中文教程、VB应用程序的中文文档或中文论坛上的讨论等内容。 在搜索的过程中,我可能会发现如何在VB中使用中文字符、如何处理中文输入输出、如何在VB应用程序中进行中文本地化等有关中文与VB编程的有用信息。此外,还可以了解到一些与VB相关的中文资源和社区,以便与其他中文VB开发者进行交流和分享经验。 总之,通过首写字母搜索中文,我可以找到与VB编程语言和中文相关的信息和资源,从而更好地学习和应用VB开发技术。 ### 回答3: VB,即Visual Basic的缩写,是一种可以通过首写字母搜索中文的编程语言。 Visual Basic(简称VB)是由微软公司开发的,基于事件驱动的编程语言。它具有易学易用的特点,初学者可以快速上手,用来快速开发各种应用程序。VB具有丰富的图形用户界面(GUI)库,可以轻松创建各种窗体、按钮、菜单等交互式控件。此外,VB还提供了丰富的数据库连接和操作功能,使得开发者能够方便地与数据库进行交互。 对于通过首写字母搜索中文的应用,VB可以通过编写相应的代码实现。通过用户输入的拼音首字母,VB可以搜索相应的中文词汇并进行显示。例如,用户输入“X”作为首写字母,VB可以搜索并显示所有以“X”开头的中文词汇,并将搜索结果以列表或其他形式展示给用户。 实现此功能的代码可以通过VB的字符串处理函数、输入框组件以及循环等技术来完成。首先,需要获取用户输入的拼音首字母,并将其转化为大写或小写形式。然后,通过读取一个包含大量中文词汇的数据库或文本文件,对每个词汇逐一判断其拼音或汉字的首字母。如果匹配成功,将词汇加入搜索结果集合中。最后,将搜索结果以合适的方式展示给用户。 通过VB,我们可以很方便地实现通过拼音首字母搜索中文的功能,为用户提供更便捷、快速的中文查找体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值