利用反射修改ListView的ScollBar图标

简介: MainActivity如下: package cc.testlistviewscollbar;import java.lang.reflect.

MainActivity如下:

package cc.testlistviewscollbar;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.os.Bundle;
import android.widget.AbsListView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.app.Activity;
import android.graphics.drawable.Drawable;
/**
 * Demo描述:
 * 利用反射修改ListView的ScollBar图标
 * 
 * 注意事项:
 * 并不是说这么做就一定会有效果.
 * 只有当ListView要显示的数据足够多(比如四屏或更多)时才会起到作用.
 * 
 * 参考资料:
 * 1 http://blog.csdn.net/java2009cgh/article/details/7301197
 * 2 http://blog.csdn.net/lfdfhl/article/details/10311505
 *   Thank you very much
 *
 */
public class MainActivity extends Activity {
	private ListView mListView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
		setFastScrollBarForListView();
	}

	private void init(){
		mListView=(ListView) findViewById(R.id.listview);
        List<HashMap<String, Object>> list=new ArrayList<HashMap<String,Object>>();
      	HashMap<String, Object> hashMap=null;
      	for (int i = 0; i < 100; i++) {
      		hashMap=new HashMap<String, Object>();
      		hashMap.put("name", "小明"+i);
          	hashMap.put("phone", "135"+i);
          	hashMap.put("amount","500"+i);
        	list.add(hashMap);
		}
      SimpleAdapter adapter=new SimpleAdapter(this, list, R.layout.listviewitem, 
      new String []{"name","phone","amount"}, new int[]{R.id.name,R.id.phone,R.id.amount});
      mListView.setAdapter(adapter);
	}
	
	//修改ListView的FastScroller图标
	private void setFastScrollBarForListView() {
        try {
            Field field = AbsListView.class.getDeclaredField("mFastScroller");
            field.setAccessible(true);
            Object object = field.get(mListView);
            field = field.getType().getDeclaredField("mThumbDrawable");
            field.setAccessible(true);
            Drawable drawable = (Drawable) field.get(object);
            drawable = getResources().getDrawable(R.drawable.ic_launcher);
            field.set(object, drawable);
        } catch (Exception e) {
        	System.out.println("----> 异常信息:"+e.toString());
            e.printStackTrace();
        }

    }
	
}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerInParent="true"
        android:fastScrollEnabled="true"
        android:focusable="true" />

</RelativeLayout>

listviewitem如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="50dip"
    android:gravity="center"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/name"
        android:layout_width="100dip"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/phone"
        android:layout_width="150dip"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/amount"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


相关文章
|
缓存 前端开发
一个可以拖动的自定义Gridview代码
这个可以拖动的gridview继承于gridview,所以,用法和gridview一样, 代码如下: public class DragGridView extends GridView { private long dragResponseMS = 700; // item长按响应的时间 private int mDragPosition;// 正在拖拽的posi
1206 0
|
10月前
如何实现更改窗体标题栏的样式
如何实现更改窗体标题栏的样式
74 0
|
XML Android开发 数据格式
|
Android开发
android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置
android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置
|
存储 Windows
WinFrom 控件 属性 小结
1、ToolTip.ToolTipTitle 属性 获取或设置工具提示窗口的标题。 小注:         该标题在窗口中作为一行粗体文本显示在标准的工具提示控件说明文本的上方。 通常,标题只用于区分窗体上不同类别的控件,或作为较长控件说明的简介。         标题的最大长度是 99 个字符。 如果此属性包含的字符串比 99 个字符长,则不会显示任何标题。 2、Control
975 0
|
前端开发
自定义控件之--继承控件(圆形TextView)
师从郭大,自学于心,继承控件无疑就是继承自现有控件,保持继承的控件的属性并进行必要的扩展。   比如下面这个自定义控件,它就保持了TextView的属性,并对TextView的外观进行必要的修改该来适应自己的项目,主要实现的是一个圆形的TextView的功能。
927 0

热门文章

最新文章