转:Android 在Java代码中设置style属性--使用代码创建ProgressBar对象
?
在andriod开发中,很大一部分都要与资源打交道,比如说:图片,布局文件,字符串,样式等等。这给我们想要开发一些公共的组件带来很大的困难,因为公共的组件可能更愿意以jar包的形式出现。但是java的jar包中只允许出现java代码而不能出现资源。
当我们想要以jar包的形式提供我们自己开发的公共组件时,我们就需要把以代码的形式创建资源。
下面提供一个使用全Java代码的形式创建一个ProgressBar。
ProgressBar默认的样式是一个圈圈,我们要想其显示为进度条的样式可以在布局文件中使用如下代码:
??
上面的关键代码是style的部分,这部分的代码就是使得ProgressBar由转圈圈的样式变成进度条的样式。使用这种方式创建的ProgressBar不能包含在jar包中。
?
同样我们也可以使用纯代码的形式创建ProgressBar对象,如下:
?
??这时运行我们的程序,发现ProgressBar已从圈圈变成进度条的样式。这时我们可以在代码中把这些属性设成布局文件中的值,纯Java代码看起来应该如下面的那样:
?
??该工具提供一个共有的方法:public static void setFieldValue(final Object object, final String fieldName, final Object value)来修改一个对象的私有变量的值:
这时我们的ProgressBar代码看起来应该如下:
ProgressBar progressBar = new ProgressBar(this); BeanUtils.setFieldValue(progressBar, "mIndeterminateOnly", new Boolean(false)); progressBar.setIndeterminate(false); progressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal)); progressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal)); progressBar.setMinimumHeight(20); LinearLayout layout = new LinearLayout(this); layout.addView(progressBar, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); setContentView(layout);??到此为止我们终于使用纯java代码的方式创建了一个ProgressBar的进度条样式。
?
转自:http://hi.baidu.com/xiaofanqing/blog/item/ec59cfc8ea9129047f3e6fda.html
?
?
?