利用反射修改ListView的ScollBar图标

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>
时间: 2024-08-14 16:33:09

利用反射修改ListView的ScollBar图标的相关文章

Java反射高级应用--利用反射调用类的私有方法修改私有方法值,以及替换Java的类成员数据

  package me.test; import java.lang.reflect.*;  //导入反射需要的包 public class ReflectTest {  public static void main(String[] args)  throws  Exception  {       /*  下面通过反射完成对一个对象中成员的替换    *   并且执行执行私有方法     *   完成对 Poiont类的对象中所有的 String的对象的d换成x    *   并且类中无

利用反射从XML构造VO

xml     反射使您的程序代码能够接入装载到 JVM 中的类的内部信息,允许你编写与执行时,而不是源代码中选定的类协作的代码.这使反射成为构建灵活的应用的主要工具.        首先观察下面的 XML 文件:  <?xml version = '1.0' encoding = 'gb2312'?><ROOT>   <ARSUBITEM num="1">      <C_ITEMNO>300200500009</C_ITEMNO

修改 EXE 文件的图标

[关键字]VC++,修改EXE文件的图标 在很多年前很著名的熊猫烧香病毒,就有这样一个行为,是搜索硬盘上的可执行文件并感染它们,其典型外观症状就是程序的图标变成了熊猫烧香.本文讲解的是修改EXE文件(可执行文件)的图标,可以看做是我写PE文件的Directoried相关文章的一个后续应用,本文性质属于技术可行性研究.考察下windows系统上的文件可以发现下面的特征: (1)应用程序的可执行文件可以有自己定义的图标,通常位于其资源中,资源管理器使用资源中的图标显示它们,如果没有资源,就显示成系统

利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

(C#)利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

.Net/C#: 利用反射编写通用的 rss 2.0 的 reader

rss /* .Net/C#: 利用反射编写通用的 rss 2.0 的 reader 最近在写一个 Simple Rss Reader 网上找到现成代码两种: 1.代码简单的,但不够通用 (如: 本站的一些专用 rss reader) 2.代码复杂的,但没有足够时间去消化 (如: rssbandit) 遂自己动手: 由于 rss 的基本属性大家都有! 但一些特殊不通用属性,如: slash:comments wfw:comment wfw:commentRss trackbackping 不一定

利用反射,实现动态调用winform窗体!!

动态 实用前提:在WinForm程序中,通过主窗体的Menu打开不同的窗体我以前的做法:在Menu的Click事件中,创建打开窗体的对象实例这样的缺点,我不说了:)看看利用反射动态调用窗体对象的方法:private void CreateForm(string strName){ this.Cursor = Cursors.WaitCursor; string path=AssemblyName;//项目的Assembly选项名称 string name=strName; //类的名字 Form

C#利用反射简化给类字段赋值

 这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的 然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值 1.类的定义 namespace CCB_Donet.ClassFolder { public class FieldRuleInfo { public string gStrFNo; public string gStrFName; public string gStrFLock; public string gStrFCaption; public strin

如何修改WinXP系统桌面图标的间距

  如何修改WinXP系统桌面图标的间距 方法一:更改显示属性 1.在桌面空白处点右键→属性→外观→点击"高级"按钮 2.在弹出的"高级外观"窗口中,在"项目"下拉框中选择"图标间距(垂直)",修改其大小为43;然后再选择"图标间距(水平)",修改其大小为43,确定即可,相关截图如下所示: 3.此时回到桌面,刷新下看效果,图标应该已经恢复正常了. 方法二:修改系统注册表 1.开始→运行→输入regedit,