Android之RemoteViews

来源:互联网 发布:表格不同行数据相加 编辑:程序博客网 时间:2024/05/16 14:35

到目前为止,我发现RemoteView会用在两个地方:一个是在AppWidget,另外一个是在Notification. 

先从官方对他的定义来看: 
RemoteView-- 
A class that describes a view hierarchy that can be displayed in another process. The hierarchy is inflated from a layout resource file, and this class provides some basic operations for modifying the content of the inflated hierarchy. 

RemoteView描述一个view,而这个view是在另外一个进程显示的。它inflate于layout资源文件。并且提供了可以修改过view内容的一些简单基础的操作。 

从这个定义我们就知道RemoteView是用来描述一个垮进程显示的view从而你就会明白为什么AppWidget和Nofication需要用到它了。 
1,AppWidget---RemoteView 
我们都知道AppWidgetProvider是一个BrocaseReceiver,只是接受到Enable, Update,disale,delete这些message,而真正显示界面的是AppWidgetHostView(这是在Launcher里面实现的)这中间就是通过RemoteView来沟通。通过RemoteView告诉Launcher你想要的AppWidget是长什么样。 

2,Notification--RemoteView 

若你想自定义你的Notification也必须通过RemoteView.因为你定义的Nofication和显示Notification也是两个不同的进程。


   如何实例化一个RemoteViews 

构造方法 
RemoteViews(String packageName, int layoutId) 
创建一个新的RemoteViews 对象将显示 views包含指定一个layout资源. 
RemoteViews(Parcel parcel) 
读取RemoteViews对象从一个parcel中. 



   首先给大家一段例子简单说明下构造和如何使用 

     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider); 
     views.setTextViewText(R.id.appwidget_text, "Android开发网欢迎您");  

    appWidgetManager.updateAppWidget(appWidgetId, views); 


RemoteViews中的setxxx方法 
比如setCharSequence(int viewId, String methodName, CharSequence value); 
views.setString(R.id.textview01, "setText", battery + "%"); 
其中views是RomoteViews的实例, 
第一个参数就是ID了, 
第二个参数,是一个方法名字,比如这里是textView,那么textView会有很多方法,比如setBackground(), setText(), setTextColor()等等,第二个参数就填这个函数名,不要括号, 
第三个参数就填第二个函数所用到的参数,比如如果是setTextColor(int), 第三个参数就带int进去(当然如果是这个你就必须用views.setInt(...)这个函数) 



    详细的 该类的公共方法列表,下面的viewId为layout文件中的id定义,常用的方法已经翻译成中文描述。 


Public Methods 
View apply(Context context, ViewGroup parent) 
Inflates the view hierarchy represented by this object and applies all of the actions. 
int describeContents() 
Describe the kinds of special objects contained in this Parcelable's marshalled representation. 
int getLayoutId() 
String getPackage() 
boolean onLoadClass(Class clazz) 
Hook to allow clients of the LayoutInflater to restrict the set of Views that are allowed to be inflated. 
void reapply(Context context, View v) 
Applies all of the actions to the provided view. 
void setBitmap(int viewId, String methodName, Bitmap value) 
Call a method taking one Bitmap on a view in the layout for this RemoteViews. 
void setBoolean(int viewId, String methodName, boolean value) 
Call a method taking one boolean on a view in the layout for this RemoteViews. 
void setByte(int viewId, String methodName, byte value) 
Call a method taking one byte on a view in the layout for this RemoteViews. 
void setChar(int viewId, String methodName, char value) 
Call a method taking one char on a view in the layout for this RemoteViews. 
void setCharSequence(int viewId, String methodName, CharSequence value) 
Call a method taking one CharSequence on a view in the layout for this RemoteViews. 
void setChronometer(int viewId, long base, String format, boolean started) 
Equivalent to calling Chronometer.setBase, Chronometer.setFormat, and Chronometer.start() or Chronometer.stop(). 
void setDouble(int viewId, String methodName, double value) 
Call a method taking one double on a view in the layout for this RemoteViews. 
void setFloat(int viewId, String methodName, float value) 
Call a method taking one float on a view in the layout for this RemoteViews. 
void setImageViewBitmap(int viewId, Bitmap bitmap) 
等同于调用ImageView.setImageBitmap方法,从Bitmap对象中设置一个图片 
void setImageViewResource(int viewId, int srcId) 
等同于调用ImageView.setImageResource,从一个资源中设置图片 
void setImageViewUri(int viewId, Uri uri) 
等同于调用ImageView.setImageURI,从URI中设置图像 
void setInt(int viewId, String methodName, int value) 
Call a method taking one int on a view in the layout for this RemoteViews. 
void setLong(int viewId, String methodName, long value) 
Call a method taking one long on a view in the layout for this RemoteViews. 
void setOnClickPendingIntent(int viewId, PendingIntent pendingIntent) 
Equivalent to calling setOnClickListener(android.view.View.OnClickListener) to launch the provided PendingIntent. 
void setProgressBar(int viewId, int max, int progress, boolean indeterminate) 
等同于调用ProgressBar.setMax, ProgressBar.setProgress, and ProgressBar.如果indeterminate为true则进度条的最大和最小进度将会忽略 
void setShort(int viewId, String methodName, short value) 
Call a method taking one short on a view in the layout for this RemoteViews. 
void setString(int viewId, String methodName, String value) 
Call a method taking one String on a view in the layout for this RemoteViews. 
void setTextColor(int viewId, int color) 
等同于setTextColor(int).,设置文本的颜色 
void setTextViewText(int viewId, CharSequence text) 
等同于TextView.setText,设置文本内容 
void setUri(int viewId, String methodName, Uri value) 
Call a method taking one Uri on a view in the layout for this RemoteViews. 
void setViewVisibility(int viewId, int visibility) 
等同于调用View.setVisibility,设置该ID控件的可见性 
void writeToParcel(Parcel dest, int flags) 
Flatten this object in to a Parcel.
RemoteViews中的setxxx方法 
比如setCharSequence(int viewId, String methodName, CharSequence value); 
views.setString(R.id.textview01, "setText", battery + "%"); 
其中views是RomoteViews的实例, 
第一个参数就是ID了, 
第二个参数,是一个方法名字,比如这里是textView,那么textView会有很多方法,比如setBackground(), setText(), setTextColor()等等,第二个参数就填这个函数名,不要括号, 
第三个参数就填第二个函数所用到的参数,比如如果是setTextColor(int), 第三个参数就带int进去(当然如果是这个你就必须用views.setInt(...)这个函数) 

原创粉丝点击