iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android如何实现带字母索引的侧边栏功能
  • 271
分享到

Android如何实现带字母索引的侧边栏功能

android 2023-05-30 22:05:39 271人浏览 泡泡鱼
摘要

这篇文章主要介绍了Android如何实现带字母索引的侧边栏功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。之前已经用自定义View做出如下这样一个效果了这两天需要重新拿来使

这篇文章主要介绍了Android如何实现带字母索引的侧边栏功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

之前已经用自定义View做出如下这样一个效果了

Android如何实现带字母索引的侧边栏功能

这两天需要重新拿来使用,发现效果虽然做出来了,不过思路不太对,就重新参考写了一个,用法也更为简单了

首要的自然是需要继承View绘制出侧边栏,并向外提供一个监听字母索引变化的方法

public class LetterIndexView extends View { public interface OnTouchingLetterChangedListener {  void onHit(String letter);  void onCancel(); } private OnTouchingLetterChangedListener touchingLetterChangedListener; private Paint paint; private boolean hit; private 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 final int DEFAULT_WIDTH; public LetterIndexView(Context context) {  this(context, null); } public LetterIndexView(Context context, @Nullable AttributeSet attrs) {  this(context, attrs, 0); } public LetterIndexView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  paint = new Paint();  paint.setAntiAlias(true);  paint.setTextAlign(Paint.Align.CENTER);  paint.setColor(Color.parseColor("#565656"));  DEFAULT_WIDTH = dpToPx(context, 24); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  setMeasuredDimension(getWidthSize(widthMeasureSpec), getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); } private int getWidthSize(int widthMeasureSpec) {  int widthMode = MeasureSpec.getMode(widthMeasureSpec);  int widthSize = MeasureSpec.getSize(widthMeasureSpec);  switch (widthMode) {   case MeasureSpec.AT_MOST: {    if (widthSize >= DEFAULT_WIDTH) {     return DEFAULT_WIDTH;    } else {     return widthSize;    }   }   case MeasureSpec.EXACTLY: {    return widthSize;   }   case MeasureSpec.UNSPECIFIED:   default:    return DEFAULT_WIDTH;  } } @Override public boolean dispatchTouchEvent(MotionEvent event) {  switch (event.getAction()) {   case MotionEvent.ACTION_DOWN:    hit = true;    onHit(event.getY());    break;   case MotionEvent.ACTION_MOVE:    onHit(event.getY());    break;   case MotionEvent.ACTION_UP:   case MotionEvent.ACTION_CANCEL:    hit = false;    if (touchingLetterChangedListener != null) {     touchingLetterChangedListener.onCancel();    }    break;  }  invalidate();  return true; } @Override protected void onDraw(canvas canvas) {  if (hit) {   //字母索引条背景色   canvas.drawColor(Color.parseColor("#bababa"));  }  float letterHeight = ((float) getHeight()) / letters.length;  float width = getWidth();  float textSize = letterHeight * 5 / 7;  paint.setTextSize(textSize);  for (int i = 0; i < letters.length; i++) {   canvas.drawText(letters[i], width / 2, letterHeight * i + textSize, paint);  } } private void onHit(float offset) {  if (hit && touchingLetterChangedListener != null) {   int index = (int) (offset / getHeight() * letters.length);   index = Math.max(index, 0);   index = Math.min(index, letters.length - 1);   touchingLetterChangedListener.onHit(letters[index]);  } } public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener onTouchingLetterChangedListener) {  this.touchingLetterChangedListener = onTouchingLetterChangedListener; } private int dpToPx(Context context, float dpValue) {  float scale = context.getResources().getDisplayMetrics().density;  return (int) (dpValue * scale + 0.5f); }}

在侧边栏时,中间会显示当前滑动指向的字母,这其实是一个TextView,在主布局文件中添加,通过IndexControl来控制TextView的可见性,并指示ListView滑动到指定项

public class IndexControl { private final ListView listView; private final TextView tv_hint; private final Map<String, Integer> letterMap; public IndexControl(ListView contactsListView, LetterIndexView letterIndexView,      TextView tv_hint, Map<String, Integer> letterMap) {  this.listView = contactsListView;  this.tv_hint = tv_hint;  this.letterMap = letterMap;  letterIndexView.setOnTouchingLetterChangedListener(new LetterChangedListener()); } private class LetterChangedListener implements LetterIndexView.OnTouchingLetterChangedListener {  @Override  public void onHit(String letter) {   tv_hint.setVisibility(View.VISIBLE);   tv_hint.setText(letter);   int index = -1;   if ("↑".equals(letter)) {    index = 0;   } else if (letterMap.containsKey(letter)) {    index = letterMap.get(letter);   }   if (index < 0) {    return;   }   index += listView.getHeaderViewsCount();   if (index >= 0 && index < listView.getCount()) {    listView.setSelectionFromTop(index, 0);   }  }  @Override  public void onCancel() {   tv_hint.setVisibility(View.INVISIBLE);  } }}

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

感谢你能够认真阅读完这篇文章,希望小编分享的“Android如何实现带字母索引的侧边栏功能”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Android如何实现带字母索引的侧边栏功能

本文链接: https://www.lsjlt.com/news/221547.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android如何实现带字母索引的侧边栏功能
    这篇文章主要介绍了Android如何实现带字母索引的侧边栏功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。之前已经用自定义View做出如下这样一个效果了这两天需要重新拿来使...
    99+
    2023-05-30
    android
  • Android开发实现根据字母快速定位侧边栏
    按首字母对List排列,并根据首字母快速定位的实现,在Android开发中被大量应用,今天我也来亲自实现一下,将这个控件封装起来,也方便以后的使用。大体上可以分为两步来实现这个控件:...
    99+
    2024-04-02
  • 如何用vue实现一个侧边栏拖动功能
    这篇文章主要介绍了如何用vue实现一个侧边栏拖动功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用vue实现一个侧边栏拖动功能文章都会有所收获,下面我们一起来看看吧。首先,需要安装 Vue.js,可以使用...
    99+
    2023-07-05
  • Android如何实现边录边播功能
    这篇文章给大家分享的是有关Android如何实现边录边播功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Android可以通过MediaRecorder和AudioRecord这两个工具来实现录音,MediaR...
    99+
    2023-06-25
  • Android仿iOS如何实现侧滑返回功能
    这篇文章将为大家详细讲解有关Android仿iOS如何实现侧滑返回功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先上个效果再说:原理Activity 本身是不可以滑动的,但是我们可以制造一个正在滑动 ...
    99+
    2023-05-30
  • 微信小程序如何实现字母索引菜单
    本篇内容介绍了“微信小程序如何实现字母索引菜单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!wxml文件<view clas...
    99+
    2023-07-02
  • 如何在Android应用中利用DrawerLayout实现一个侧拉菜单栏功能
    如何在Android应用中利用DrawerLayout实现一个侧拉菜单栏功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。activity_main.xml<&#...
    99+
    2023-05-31
    android drawerlayout roi
  • 如何在Android应用中实现一个侧滑功能
    本篇文章给大家分享的是有关如何在Android应用中实现一个侧滑功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现说明:通过自定义布局实现:SlidingLayout继承于...
    99+
    2023-05-31
    android roi
  • css如何实现带搜索图标的搜索框功能
    这篇文章给大家分享的是有关css如何实现带搜索图标的搜索框功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言给大家分享一下前端用处很多的带小图标的搜索框的制作方法。效果展示基本思路搜索图像用绝对定位放到搜索框...
    99+
    2023-06-08
  • AJax如何实现类似百度搜索栏的功能
    小编给大家分享一下AJax如何实现类似百度搜索栏的功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实习过程中需要用到异步提交功能,于是试着去了解了一下ajax,...
    99+
    2023-06-08
  • php如何实现关键字搜索功能
    这篇文章主要介绍“php如何实现关键字搜索功能”,在日常操作中,相信很多人在php如何实现关键字搜索功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何实现关键字搜索功能”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-26
  • Android如何基于自带的DownloadManager实现下载功能
    这篇文章将为大家详细讲解有关Android如何基于自带的DownloadManager实现下载功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:DownloadManager.Request&n...
    99+
    2023-05-30
    android downloadmanager
  • 如何实现Android导航栏功能项的显示与屏蔽
    这篇文章给大家分享的是有关如何实现Android导航栏功能项的显示与屏蔽的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Android 的导航栏有诸多功能,例入 截屏,音量加,音量减,最近任务,菜单.返...
    99+
    2023-06-22
  • Android通知栏增加快捷开关功能如何实现
    本篇内容主要讲解“Android通知栏增加快捷开关功能如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android通知栏增加快捷开关功能如何实现”吧!TileService继承自Serv...
    99+
    2023-07-05
  • Android studio如何实现语音转文字功能
    这篇文章主要介绍了Android studio如何实现语音转文字功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、在科大讯飞的官网上注册并下载SDK首先去讯飞开...
    99+
    2023-06-29
  • 如何在Java和Django中实现全文索引功能?
    全文搜索是现代Web应用程序中的一个核心功能,它可以帮助用户快速找到他们所需的信息。Java和Django是两个流行的Web开发框架,它们都提供了强大的搜索功能。在本文中,我们将讨论如何在Java和Django中实现全文搜索功能。 一、Ja...
    99+
    2023-10-27
    linux django 索引
  • PHP在Unix和Linux系统上的索引功能如何实现?
    在Unix和Linux系统上,PHP提供了强大的索引功能,使得我们可以轻松地在文件中查找特定的内容。本文将介绍PHP在Unix和Linux系统上的索引功能的实现方式,并提供相关的演示代码。 一、什么是索引? 在计算机科学中,索引是一种数据...
    99+
    2023-10-16
    unix 索引 linux
  • Android中如何使用RadioGroup和Fragment实现底部导航栏的功能
    小编给大家分享一下Android中如何使用RadioGroup和Fragment实现底部导航栏的功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在一些购物商城中...
    99+
    2023-06-15
  • JS如何实现图片轮播与索引变色功能
    这篇文章主要介绍JS如何实现图片轮播与索引变色功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体代码如下所示:<!DOCTYPE html PUBLIC...
    99+
    2024-04-02
  • 如何在Java中实现高性能的对象存储和索引功能?
    在当今大数据时代,高性能的对象存储和索引功能是非常重要的。Java作为一种广泛应用的编程语言,在实现高性能的对象存储和索引功能方面也有着自己的优势。 本文将介绍如何在Java中实现高性能的对象存储和索引功能。我们将涵盖以下主题:使用Java...
    99+
    2023-06-08
    对象 存储 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作