神刀安全网

android基础—->WidGet的使用

Widget是一个可以添加在别的应用程序中的”小部件”,我们可以使用自定义的Widget远程控制我们的程序做一些事情。一般用于在桌面上添加一个小部件,现在我们开始小部件的学习。

目录导航:

WidGet的简要说明

一、 WidGet的特点:

  • 身材微:它们一般都很小,在终端上嵌入非常方便,运行快速。
  • 形式多:Widget可以以多种形式呈现出来,幻灯秀、视频、地图、新闻、小游戏等等
  • 功能巨:别看它们小,却服务周到,它可以为你报告新闻,天气预报网站,Widget会将信息主动带给你
  • 个性化:Widget更像一个属于我们每个人的魔方,任由用户聚合

二、 WidGet的使用步骤:

  • 绘制小组件的布局:在layout中创建一个布局文件
  • 配置widget的基本属性:创建一个资源文件夹,添加一个widget属性的配置xml文件
  • 定义AppWidgetProvider:创建一个继承AppWidgetProvider的java类
  • 提供Configuration Activity:可以在MainActiviy中使用

WidGet的实例代码

android基础---->WidGet的使用

按照上述所说,我们开始WidGet的实例说明:

一、 在layout中创建一个WidGet的布局文件:widget.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#09C" android:padding="@dimen/widget_margin">  <TextView     android:id="@+id/appwidget_text"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerHorizontal="true"     android:layout_centerVertical="true"     android:layout_margin="8dp"     android:background="#09C"     android:contentDescription="@string/appwidget_text"     android:text="@string/appwidget_text"     android:textColor="#ffffff"     android:textSize="24sp"     android:textStyle="bold|italic" /> </RelativeLayout> 

二、 创建一个资源文件夹xml,添加一个widget属性的配置xml文件:widget_info.xml

 <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"     android:configure="com.example.linux.listviewtest.MainActivity"     android:initialKeyguardLayout="@layout/widget"     android:initialLayout="@layout/widget"     android:minHeight="40dp"     android:minWidth="250dp"     android:previewImage="@drawable/example_appwidget_preview"     android:resizeMode="horizontal|vertical"     android:updatePeriodMillis="86400000"     android:widgetCategory="home_screen"> </appwidget-provider> 

三、 创建一个继承AppWidgetProvider的java类:widget

 package xml;  import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast;  import com.example.linux.listviewtest.TimerService;  /**  * writer: huhx  * Implementation of App Widget functionality.  */ public class widget extends AppWidgetProvider {     private final static String TAG = "WidGetTest";      public widget() {         Log.i(TAG, "widget constructor.");     }      // 当一个或多个小组件的实例被删除时调用     @Override     public void onDeleted(Context context, int[] appWidgetIds) {         Log.i(TAG, "on deleted");         super.onDeleted(context, appWidgetIds);     }      // 当最后一个这样的小组件被删除     @Override     public void onDisabled(Context context) {         super.onDisabled(context);         Log.i(TAG, "on disable");         context.stopService(new Intent(context, TimerService.class));     }      // 当这样的小组件被初始化时,也就是当小组件被拖到桌面     @Override     public void onEnabled(Context context) {         super.onEnabled(context);         Log.i(TAG, "on enable");         context.startService(new Intent(context, TimerService.class));     }      // to dispatch calls to the various other methods on AppWidgetProvider.     @Override     public void onReceive(Context context, Intent intent) {         Log.i(TAG, "on receive");         super.onReceive(context, intent);     }      // 小组件的更新     @Override     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {         super.onUpdate(context, appWidgetManager, appWidgetIds);     } } 

四、 创建一个更新时间的服务类:TimerService

 package com.example.linux.listviewtest;  import android.app.Service; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Intent; import android.os.IBinder; import android.util.Log; import android.widget.RemoteViews; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import xml.widget;  public class TimerService extends Service {     private final static String TAG = "WidGetTest";     private Timer timer;     private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      public TimerService() {         Log.i(TAG, "timer service constructor");     }      @Override     public IBinder onBind(Intent intent) {         Log.i(TAG, "on bind");         return null;     }      @Override     public void onCreate() {         super.onCreate();         Log.i(TAG, "on create");         timer = new Timer();         timer.schedule(new TimerTask() {             @Override             public void run() {                 updateViews();             }         }, 0, 1000);     }      private void updateViews() {         Log.i(TAG, "update views");         String time = simpleDateFormat.format(new Date());         RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);         remoteViews.setTextViewText(R.id.appwidget_text, time);         AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());         ComponentName name = new ComponentName(getApplicationContext(), widget.class);         manager.updateAppWidget(name, remoteViews);     }     @Override     public void onDestroy() {         super.onDestroy();         timer = null;     } } 

五、 在AndroidManifest.xml中,注册服务和接收器:

 <activity android:name=".MainActivity">     <intent-filter>         <action android:name="android.intent.action.MAIN" />         <category android:name="android.intent.category.LAUNCHER" />     </intent-filter> </activity>  <service     android:name=".TimerService"     android:enabled="true"     android:exported="true" />  <receiver android:name="xml.widget">     <intent-filter>         <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />     </intent-filter>     <meta-data         android:name="android.appwidget.provider"         android:resource="@xml/widget_info" /> </receiver> 

六、 在MainActivity中使用:

 package com.example.linux.listviewtest;  import android.appwidget.AppWidgetManager; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log;  public class MainActivity extends AppCompatActivity {     private final static String TAG = "WidGetTest";     int mAppWidgetId;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         Log.i(TAG, " on main create ... ");          setResult(RESULT_CANCELED);          // Find the widget id from the intent.         Intent intent = getIntent();         Bundle extras = intent.getExtras();         if (extras != null) {             mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,                     AppWidgetManager.INVALID_APPWIDGET_ID);         }          // If they gave us an intent without the widget id, just bail.         if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {             finish();         }          // return OK         Intent resultValue = new Intent();         resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);          setResult(RESULT_OK, resultValue);         finish();     } } 

七、 运行效果如下截图以及打印的日志如下:

android基础----&gt;WidGet的使用

友情链接

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » android基础—->WidGet的使用

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮