当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于运用代码创建ProgressBar        关于使用代码创建ProgressBar 在自己的项目中,遇到了代码创建ProgressBar,无法更改样式等问题。在交流群里,也有人问过! 今天我就结合我查的资料和大家交流一下。   ProgressBar mProgressBar=new.........
    ▪ Gallery 拖动成效        Gallery 拖动效果 public class Activity01 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); .........
    ▪ 状态栏揭示Notification       状态栏提示Notification 当有未接电话或者短信时,在手机顶部状态栏就会出现一个小图标,提示用户没有处理的快讯,android提供了NotificationManager来管理状态栏信息,提供Notification处理这些.........

[1]关于运用代码创建ProgressBar
    来源: 互联网  发布时间: 2014-02-18
关于使用代码创建ProgressBar

在自己的项目中,遇到了代码创建ProgressBar,无法更改样式等问题。在交流群里,也有人问过!

今天我就结合我查的资料和大家交流一下。

 

ProgressBar mProgressBar=new ProgressBar(context);
this.addView(mImageView,0);

 

 这样,可以用代码创建一个ProgressBar,可是怎么把的样式改成横条状呢?

在使用XML文件来布局时,会使用style来设置:

 


 

 可是我们有代码怎么来设置呢?没ProgressBar.setStyle()方法啊!

查了一下高手写的文章,了理到从源码中可以看出progressBarStyleHorizontal也是一个布局罢了

源码如下:

 

<ProgressBar android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:indeterminateOnly="false"

android:progressDrawable="@android:drawable/progress_horizontal"

android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"

android:minHeight="20dip"

android:maxHeight="20dip" />
 

 

 

我们可以通过代码来设置:

 

mProgressBar.setIndeterminate(false);
mProgressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
mProgressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal));

 这样就可以实现ProgressBar的条状布局了!

可这时,我们又会发现ProgressBar的进度,无法刷新

原因是XML文件中的android:indeterminateOnly="false"和 代码中的progressBar.setIndeterminate(false)并不完全一样。布局文件的属性有一个Only结尾但代码中并没有,而查找Api发现并没有setIndeterminateOnly这样的一个方法。

看一下ProgressBar的源码我们会发现ProgressBar中有两个私有变量:mOnlyIndeterminate和mIndeterminate。而程序没有提供设置mOnlyIndeterminate的方法。

这里我们可以使用Java的反射机制来设置。

我们写一个通用的BeanUtils类来进行反射操作:

 

public class BeanUtils {
    private BeanUtils() {

    }

    /**
     * 直接设置对象属性值,无视private/protected修饰符,不经过setter函数.
     */
    public static void setFieldValue(final Object object, final String fieldName, final Object value) {
        Field field = getDeclaredField(object, fieldName);
        if (field == null)
            throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
        makeAccessible(field);
        try {
            field.set(object, value);
        } catch (IllegalAccessException e) {
        Log.e("zbkc", "", e);
        }
    }

    /**
     * 循环向上转型,获取对象的DeclaredField.
     */
    protected static Field getDeclaredField(final Object object, final String fieldName) {
        return getDeclaredField(object.getClass(), fieldName);
    }

    /**
     * 循环向上转型,获取类的DeclaredField.
     */
    @SuppressWarnings("unchecked")
    protected static Field getDeclaredField(final Class clazz, final String fieldName) {
        for (Class superClass = clazz; superClass != Object.class; superClass = superClass.getSuperclass()) {
            try {
                return superClass.getDeclaredField(fieldName);
            } catch (NoSuchFieldException e) {
                // Field不在当前类定义,继续向上转型
            }
        }
        return null;
    }

    /**
     * 强制转换fileld可访问.
     */
    protected static void makeAccessible(Field field) {
        if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
            field.setAccessible(true);
        }
    }
}
 

 

 

然后,我们在创建ProgressBar的地方使用下面的语句设置mOnlyIndeterminate为false

 

BeanUtils.setFieldValue(mProgressBar, "mOnlyIndeterminate", new Boolean(false));

 

 这样就实现了用代码来创建ProgressBar。

下面是我的代码

 

super(context);
this.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
ProgressBar mProgressBar=new ProgressBar(context);
BeanUtils.setFieldValue(mProgressBar, "mOnlyIndeterminate", new Boolean(false));
mProgressBar.setIndeterminate(false);
mProgressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
mProgressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal));
mProgressBar.setLayoutParams(new FrameLayout.LayoutParams(65, 5, Gravity.CENTER_VERTICAL) );
this.addView(mProgressBar,0);

 如果大家有更好的方法,希望大家能给我留言!

 


    
[2] Gallery 拖动成效
    来源: 互联网  发布时间: 2014-02-18
Gallery 拖动效果
public class Activity01 extends Activity
{
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		//获得Gallery对象
		Gallery g = (Gallery) findViewById(R.id.Gallery01);

		//添加ImageAdapter给Gallery对象
		g.setAdapter(new ImageAdapter(this));

		//设置Gallery的背景
		g.setBackgroundResource(R.drawable.bg0);
		
		//设置Gallery的事件监听
		g.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v, int position, long id)
			{
		        Toast.makeText(Activity01.this,"你选择了"+(position+1)+" 号图片", 
		            Toast.LENGTH_SHORT).show();
			}
		});
	}
}

public class ImageAdapter extends BaseAdapter
{
	// 定义Context
	private Context		mContext;		
	// 定义整型数组 即图片源
	private Integer[]	mImageIds = 
	{ 						
			R.drawable.img1, 
			R.drawable.img2, 
			R.drawable.img3, 
			R.drawable.img4, 
			R.drawable.img5, 
			R.drawable.img6, 
			R.drawable.img7,
			R.drawable.img8,		
	};

	// 声明 ImageAdapter
	public ImageAdapter(Context c)
	{
		mContext = c;
	}

	// 获取图片的个数
	public int getCount()
	{
		return mImageIds.length;
	}

	// 获取图片在库中的位置
	public Object getItem(int position)
	{
		return position;
	}

	// 获取图片ID
	public long getItemId(int position)
	{
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent)
	{
		ImageView imageview = new ImageView(mContext);

		// 给ImageView设置资源
		imageview.setImageResource(mImageIds[position]);
		// 设置布局 图片120×120显示
		imageview.setLayoutParams(new Gallery.LayoutParams(120, 120));
		// 设置显示比例类型
		imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
		return imageview;
	}
}
1 楼 silencetq 2011-09-13  
想请教,这种拖动的话,拖动的图片好像会有层黑色膜一样,这个是跟透明度有关么,我应该怎么解决呢?

    
[3] 状态栏揭示Notification
    来源: 互联网  发布时间: 2014-02-18
状态栏提示Notification
当有未接电话或者短信时,在手机顶部状态栏就会出现一个小图标,提示用户没有处理的快讯,android提供了NotificationManager来管理状态栏信息,提供Notification处理这些快讯信息
示例
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="@string/hello" />
	<Button android:text="Button01" android:id="@+id/Button01"
		android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>	
</LinearLayout>


main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="多谢使用" />
</LinearLayout>


Activity.java
public class Test_Notification extends Activity {  
    /** Called when the activity is first created. */  
    private Button btn1;  
    private Notification notification;  
    private NotificationManager notificationManager;  
    private Intent intent;  
    private PendingIntent pendIntent;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        btn1 = (Button) this.findViewById(R.id.Button01);  
        notificationManager = (NotificationManager) this  
                .getSystemService(NOTIFICATION_SERVICE);// 获取系统服务(消息管理)  
        // 点击通知时转移内容  
        intent = new Intent(this, Activity2.class);  
        // 设置点击通知时显示内容的类  
       // 和Intent不同,构造pendIntent是Nofication.setLastestEventInfo参数需要
        pendIntent = PendingIntent.getActivity(this, 0, intent, 0);  
        notification = new Notification();  
        btn1.setOnClickListener(new OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                notification.icon = R.drawable.img1;// 设置在状态栏显示的图标  
                notification.tickerText = "Button1通知内容.......";//设置在状态栏显示的内容  
                notification.defaults = Notification.DEFAULT_SOUND;// 默认的声音  
                // 设置通知显示的参数  
                notification.setLatestEventInfo(Test_Notification.this,  
                        "Button1", "Button1通知", pendIntent);  
                notificationManager.notify(0, notification);// 执行通知.  
            }  
  
        });  
    }  
}  

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android消息处理机制Looper和Handler详解 iis7站长之家
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3