当前位置: 编程技术>移动开发
本页文章导读:
▪关于运用代码创建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
main2.xml
Activity.java
当有未接电话或者短信时,在手机顶部状态栏就会出现一个小图标,提示用户没有处理的快讯,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);// 执行通知. } }); } }
最新技术文章: