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

来源:互联网 发布:摩卡监控软件 编辑:程序博客网 时间:2024/05/18 02:24

上一篇讲到自定义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 0
原创粉丝点击