联系人列表字母排序索引(二)

上一篇讲到自定义View,右边字母索引,如果还没看第一篇文章的,请先看联系人列表字母排序索引(一)今天这里讲如何展示悬浮窗并显示对应的字母。

首先,我们需要一个悬浮窗,然后将悬浮窗和字母索引链接起来。

1.悬浮窗的实现。要实现一个悬浮窗口,我们需要通过WindowManger来实现,这个使用是比较简单的。

新建一个类,LetterWindow.class   这个类需要完成的功能是,显示窗口,关闭窗口,显示指定字母,可以更新字母。对应的方法为

show(),update;hide()。

package com.mjc.contactlistdemo.sort_by_letter;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.TextView;

import com.mjc.contactlistdemo.R;


/**
 * Created by mjc on 2016/5/12.
 * 字母索引显示窗口
 */
public class LetterWindow {
    private final TextView tv;
    private WindowManager.LayoutParams mParams;
    private Context context;
    private WindowManager wm;

    public LetterWindow(Activity context) {
        this.context = context;
        wm = (WindowManager) context.getSystemService(
                Context.WINDOW_SERVICE);
        mParams = new WindowManager.LayoutParams();
        mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
        mParams.format = PixelFormat.TRANSLUCENT;
        mParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        mParams.width = dm.widthPixels / 5;//窗口的宽和高
        mParams.height = dm.widthPixels / 5;
        mParams.x = 0;//窗口不偏移
        mParams.y = 0;
        //创建TextView
        tv = new TextView(context);
        tv.setTextColor(Color.WHITE);
        tv.setBackgroundResource(R.drawable.bg_contact);
        tv.setTextSize(30);
        tv.setGravity(Gravity.CENTER);
    }

    public void show(String s) {
        tv.setText(s);
        wm.addView(tv, mParams);
    }

    public void update(String s) {
        tv.setText(s);
        wm.updateViewLayout(tv, mParams);
    }

    public void hide() {
        wm.removeView(tv);
    }
}
构造方法中,指定了窗口的类型为应用窗口的子窗口,并设置了不接收触摸事件,不偏移,指定了窗口的宽和高等参数。这样一个简单的浮动窗口就实现了。


2.点击字母索引,显示浮动窗口,滑动时更新,以及释放关闭。


    <com.mjc.contactlistdemo.sort_by_letter.IndexView
            android:id="@+id/civ"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="right" />

首先在activity的布局文件中,放入我们自定义的字母索引控件。然后在Activity中得到这个控件,设置监听事件

     mIndexView = (IndexView) findViewById(R.id.civ);
        mIndexView.setOnLetterTouchedListener(this);


构造一个窗口对象

 mLetterWindow = new LetterWindow(this);

实现字母索引的监听方法

 @Override
    public void onTouch(String s) {
        mLetterWindow.show(s);
       
    }

    @Override
    public void onLetterChanged(String preLetter, String letter) {
        mLetterWindow.update(letter);
      
    }

    @Override
    public void onRelease() {
        mLetterWindow.hide();
    }


很简单,效果就出来了。








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值