精华内容
下载资源
问答
  • android 桌面小部件

    2016-11-23 20:16:46
    android小部件主要是用到RemoteViews这个类,和继承AppWidgerProvider。 在res/xml下新建一个appwidget.xml这个是定义小控件的配置信息。 appwidget-provider xmlns:android=...

    android小部件主要是用到RemoteViews这个类,和继承AppWidgerProvider。

    在res/xml下新建一个appwidget.xml这个是定义小控件的配置信息。

    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/widget"
        android:minHeight="50dp"
        android:minWidth="100dp"
        android:configure="com.example.myremoteview.MainActivity"//
        android:widgetCategory="home_screen">
    
    </appwidget-provider>
    这个是res/layout/widget.xml布局文件,在桌面上显示的就是这个
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/button"
            android:text="mybutton"/>
    </LinearLayout>
    configure当添加小控件的时候显示的activyty
    widgetCategory小控件显示的地方

    initialLayout为小部件的在android桌面显示的布局

    minHeight为小布局的最小高度

    在AppWidgerProvider中有几个方法需要说明

    onUpdate()
      当 widget 更新时被执行。

    onDeleted(Context, int[])
      当 widget 被删除时被触发。

    onEnabled(Context)
      当第1个 widget 的实例被创建时触发。也就是说,如果用户对同一个 widget 增加了两次(两个实例),那么onEnabled()只会在第一次增加widget时触发。

    onDisabled(Context)
      当最后1个 widget 的实例被删除时触发。

    onReceive(Context, Intent)
      接收到任意广播时触发,并且会在上述的方法之前被调用。

    下面是继承了AppWidgetProvider的类

    public class MyWidget extends AppWidgetProvider {
        private String CLICK_ACTION = "com.example.myremoteview.action";
       
    
        public MyWidget() {
            super();
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
            super.onReceive(context, intent);
            //小控件点击
            if (intent.getAction() == CLICK_ACTION) {
                Toast.makeText(context, "click", Toast.LENGTH_SHORT).show();
                Log.d("test", "click");
            }
            Log.d("test", intent.getAction());
    
        }
    
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            super.onUpdate(context, appWidgetManager, appWidgetIds);
            Log.d("test", "onupdata");
            //发送点击广播
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
            Intent intentClick = new Intent(CLICK_ACTION);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
            //下面两句一定要加上不然不会触发点击
            remoteViews.setOnClickPendingIntent(R.id.button,pendingIntent);
            appWidgetManager.updateAppWidget(appWidgetIds,remoteViews);
    
            }
    
        }
    

    最后是清单文件的主要代码

    <receiver android:name=".MyWidget">
        <meta-data
            android:resource="@xml/appwidget"
            android:name="android.appwidget.provider">
    
        </meta-data>
        <intent-filter>
            <action android:name="com.example.myremoteview.action" /><!--这个是点击的action-->/>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /><!--这个标识小控件的action-->/>
        </intent-filter>
    </receiver>
    下面是对应的小部件在桌面上占的单元格数。

    单元格个数
    (行 / 列)
    对应的设置大小 (dp)
    (minWidth / minHeight)
    1 40dp
    2 110dp
    3 180dp
    4 250dp
       
    n


    展开全文
  • Android 桌面小部件

    2019-10-06 11:49:21
    1. 添加AppWidgetProvider 实际上就是个带有界面的...5. 运行后,长按桌面空白处,在底部的桌面小部件列表中将自定义的部件拖到桌面     转载于:https://www.cnblogs.com/Sir-Lin/p/7777677.html

    1. 添加AppWidgetProvider 实际上就是个带有界面的BroadcastReceiver

    public class SimpleWidgetProvider extends AppWidgetProvider {
    
    }

    2. 在res -> xml 下添加AppWidgetProviderInfo

     <?xml version="1.0" encoding="utf-8"?>
     <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:minWidth="120dp"
         android:minHeight="60dp"
     android:updatePeriodMillis="1800000"
     android:initialLayout="@layout/hoem_widget"
     android:resizeMode="horizontal|vertical"
     android:widgetCategory="home_screen|keyguard"
         android:previewImage="@drawable/ic_launcher">
     </appwidget-provider>

    3. 添加桌面widget的layout

     <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@color/accent_normal">
        <ImageView
          android:id="@+id/doge_imageView"
          android:layout_width="110dp"
          android:layout_height="110dp"
          android:src="@drawable/ic_clear_white_24dp" />
       </LinearLayout>

    4. 注册

    1 <receiver android:name=".SimpleWidgetProvider" >
    2 <intent-filter>
    3 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    4 <action android:name="com.seewo.homewidgets.action.CLICK" />
    5 </intent-filter>
    6 <meta-data android:name="android.appwidget.provider"
    7 android:resource="@xml/appwidget_provider_info" />
    8 </receiver>


    5. 运行后,长按桌面空白处,在底部的桌面小部件列表中将自定义的部件拖到桌面

     

     

    转载于:https://www.cnblogs.com/Sir-Lin/p/7777677.html

    展开全文
  • Android 桌面小部件(widget)日签 ,展示农历阳历日期,一年进度,定时随机诗句
  •  ...Android桌面小部件AppWidget的使用,本例假设实现一个简单的功能,窗口小部件有一个Android Button和TextView,当点击桌面小部件时候,把系统当前的毫秒事件显示在TextView里面。 (1)首...
    

    Android桌面小部件AppWidget(1)

    Android桌面小部件AppWidget的使用,本例假设实现一个简单的功能,窗口小部件有一个Android Button和TextView,当点击桌面小部件时候,把系统当前的毫秒事件显示在TextView里面。

    (1)首先需要在Androidmanifest.xml文件代码定义窗口小部件(类似广播的静态注册):

    <receiver android:name=".AppWidget" >
                <intent-filter>
                    <action android:name="action_button" />
                </intent-filter>
                
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
    
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/appwidget" />
            </receiver>


    其中需要在res/xml目录下新建一个appwidget.xml代码文件定义appwidget-provider相关属性:

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/appwidget_layout"
        android:minHeight="20dip"
        android:minWidth="200dip"
        android:previewImage="@drawable/ic_launcher"
        android:resizeMode="horizontal|vertical"
        android:updatePeriodMillis="0"
        android:widgetCategory="home_screen" >
    
    </appwidget-provider>


    之所以同时定义了:

    <intent-filter>
                    <action android:name="action_button" />
                </intent-filter>

    是因为在我写的这个例子中,将有Button触发事件,但Android窗口小部件机制不像普通Android activity一样直接在类似Button的onClick的方法内处理业务逻辑,而是通过广播出去一个事件,然后又接受者通过RemoteViews处理。


    (2)自己写一个类继承自AppWidgetProvider(核心关键):

    import android.app.PendingIntent;
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.RemoteViews;
    
    public class AppWidget extends AppWidgetProvider {
    
    	private final String ACTION_BUTTON = "action_button";
    
    	/**
    	 * 接受广播事件
    	 */
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		super.onReceive(context, intent);
    		Log.d(this.getClass().getName(), "onReceive");
    		
    		if (intent == null)
    			return;
    
    		String action = intent.getAction();
    
    		if (action.equals(ACTION_BUTTON)) {
    			// 只能通过远程对象来设置appWidget中的状态
    			RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget_layout);
    			remoteViews.setTextViewText(R.id.text, ""+System.currentTimeMillis());
    
    			AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    
    			ComponentName componentName = new ComponentName(context, AppWidget.class);
    
    			// 更新appWidget
    			appWidgetManager.updateAppWidget(componentName, remoteViews);
    		}
    	}
    
    	/**
    	 * 到达指定的更新时间或者当用户向桌面添加AppWidget时被调用
    	 * appWidgetIds:桌面上所有的widget都会被分配一个唯一的ID标识,这个数组就是他们的列表
    	 */
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    		Log.d(this.getClass().getName(), "onUpdate");
    		
    		Intent intent = new Intent(ACTION_BUTTON);
    		PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    
    		// 小部件在Launcher桌面的布局
    		RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget_layout);
    
    		// 事件
    		remoteViews.setOnClickPendingIntent(R.id.btn, pendingIntent);
    
    		// 更新AppWidget
    		appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    	}
    	
    	
    	/**
    	 * 删除AppWidget
    	 */
    	@Override
    	public void onDeleted(Context context, int[] appWidgetIds) {
    		super.onDeleted(context, appWidgetIds);
    		Log.d(this.getClass().getName(), "onDeleted");
    	}
    
    	@Override
    	public void onDisabled(Context context) {
    		super.onDisabled(context);
    		Log.d(this.getClass().getName(), "onDisabled");
    	}
    
    	/**
    	 * AppWidget首次创建调用
    	 */
    	@Override
    	public void onEnabled(Context context) {
    		super.onEnabled(context);
    		Log.d(this.getClass().getName(), "onEnabled");
    	}
    }


    Android的桌面小部件从继承AppWidgetProvider开始,以我写的代码为例,我创建了一个Android窗口小部件名字叫AppWidget。AppWidgetProvider本身从一定角度上讲是一个Android的广播。
    一般的,重写AppWidget里面的onReceive方法,用以后面的更新操作。
    AppWidget的onUpdate里面完成view事件的初始化操作,在AppWidget里面,由于窗口小部件与本地代码运行在不同的进程空间,所以只能通过RemoteViews处理与相关view绑定的事件响应。
    本例的RemoteViews需要的布局文件在res/layout下的appwidget_layout.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="#33000000" >
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮" >
        </Button>
       
        <TextView
            android:id="@+id/text"
            android:text="text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

    RemoteViews将基于appwidget_layout.xml负责在桌面窗口小部件的外观。

    在onUpdate里面完成view与事件的绑定后,以本文为例,那么之后对按钮button的按击所产生的事件将会被传递广播到AppWidget的onReceive里面。AppWidget的交互设计模型是在onUpdate里面通过RemoteViews把view通过与事件绑定在一起,然后之后的事件触发及操作,是在onUpdate里面通过广播的形式广播出去一个Intent,此广播将有AppWidget的onReceive接收处理,在AppWidget的onReceive里面更新桌面小部件的UI等等。即:
    onUpdate -> onReceive ,此过程基于广播机制。


    代码运行结果如图:


    转载于:https://my.oschina.net/zhangphil/blog/1601774

    展开全文
  • Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3) Android桌面小部件AppWidget比较常用的场景就是音乐播放器,音乐播放器虽然通常在后台播放,但需要在桌面提供一个可以控制播放状态的APP widget...
    

    Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)


    Android桌面小部件AppWidget比较常用的场景就是音乐播放器,音乐播放器虽然通常在后台播放,但需要在桌面提供一个可以控制播放状态的APP widget,为用户提供播放、暂停、停止音乐播放器的功能。
    在附录文章1、2的基础上,本文以一个简单的例子加以说明,如何通过桌面小部件实现音乐播放器的播放、停止。简单期间,本例只提供对音乐播放器的两种控制功能:播放和停止。播放,进入后台service播放给定的音乐mp3文件;停止,则直接stopService关闭播放服务即可。
    为此,需要在桌面的小部件布局中增加两个按钮,这两个按钮暂时就以Android系统默认的播放(@android:drawable/ic_media_play)和暂停(@android:drawable/ic_media_pause)图片作为按钮使用。当按了播放按钮后,就开始启动后台服务播放mp3音乐文件(暂时以我放置在SDCard根目录下名为zhangphil.mp3的音乐文件为音频源文件);当按了停止按钮后,就stopService,即停止播放。
    和附录文章1,2相比,本例不需要更新桌面小部件的表现形式,仅需要处理由桌面小部件传导过来的点击事件,这些响应点击事件,均放置在onReceive里面处理。

    (1)

    在Androidmanifest.xml里面定义的widget:

     <receiver android:name="zhangphil.widget.AppWidget" >
               
                <intent-filter>
                    <action android:name="action_play" />
                </intent-filter>
                
                <intent-filter>
                    <action android:name="action_stop" />
                </intent-filter>
                
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
    
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/appwidget" />
                
            </receiver>


    涉及到res/xml目录下的appwidget.xml代码文件:

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/appwidget_layout"
        android:minHeight="20dip"
        android:minWidth="300dip"
        android:previewImage="@drawable/ic_launcher"
        android:resizeMode="horizontal|vertical"
        android:updatePeriodMillis="0"
        android:widgetCategory="home_screen" >
    
    </appwidget-provider>


    (2)service播放音乐。也在Androidmanifest.xml里面定义:

    <service android:name="zhangphil.widget.MyService" >
            </service>

    (3)核心关键的AppWidget.java代码文件:

    package zhangphil.widget;
    
    
    import android.app.PendingIntent;
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.RemoteViews;
    
    public class AppWidget extends AppWidgetProvider {
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		super.onReceive(context, intent);
    		// Log.d(this.getClass().getName(), "onReceive");
    
    		if (intent == null)
    			return;
    
    		String action = intent.getAction();
    
    		// 停止播放
    		if (action.equals(Constants.ACTION_STOP)) {
    			Intent serviceIntent = new Intent(context, MyService.class);
    			context.stopService(serviceIntent);
    		}
    
    		// 点击了按钮,启动一个后台服务播放
    		if (action.equals(Constants.ACTION_PLAY)) {
    			Intent serviceIntent = new Intent(context, MyService.class);
    			context.startService(serviceIntent);
    		}
    	}
    
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    		Log.d(this.getClass().getName(), "onUpdate");
    
    		RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget_layout);
    
    		// 播放图片作为按钮,绑定播放事件
    		Intent intentPlay = new Intent(Constants.ACTION_PLAY);
    		PendingIntent pendingIntentPlay = PendingIntent.getBroadcast(context, Constants.REQUEST_CODE_PLAY, intentPlay,
    				PendingIntent.FLAG_UPDATE_CURRENT);
    		remoteViews.setOnClickPendingIntent(R.id.play, pendingIntentPlay);
    
    		// 停止图片作为按钮,绑定停止事件
    		Intent intentStop = new Intent(Constants.ACTION_STOP);
    		PendingIntent pendingIntentStop = PendingIntent.getBroadcast(context, Constants.REQUEST_CODE_STOP, intentStop,
    				PendingIntent.FLAG_UPDATE_CURRENT);
    		remoteViews.setOnClickPendingIntent(R.id.stop, pendingIntentStop);
    
    		// 更新AppWidget
    		appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    	}
    
    	/**
    	 * 删除AppWidget
    	 */
    	@Override
    	public void onDeleted(Context context, int[] appWidgetIds) {
    		super.onDeleted(context, appWidgetIds);
    		Log.d(this.getClass().getName(), "onDeleted");
    	}
    
    	@Override
    	public void onDisabled(Context context) {
    		super.onDisabled(context);
    		Log.d(this.getClass().getName(), "onDisabled");
    	}
    
    	/**
    	 * AppWidget首次创建调用
    	 */
    	@Override
    	public void onEnabled(Context context) {
    		super.onEnabled(context);
    		Log.d(this.getClass().getName(), "onEnabled");
    	}
    }

    AppWidget.java里面RemoteViews用到的布局文件appwidget_layout.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#33000000"
        android:orientation="horizontal" >
    
        <ImageView
            android:id="@+id/play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_media_play" >
        </ImageView>
    
        <ImageView
            android:id="@+id/stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/ic_media_pause" >
        </ImageView>
    
    </LinearLayout>


    (4)service后台服务MyService.java,该部分代码将负责在后台播放或者停止音播放:

    package zhangphil.widget;
    
    import java.io.File;
    
    import android.app.Service;
    import android.content.Intent;
    import android.media.MediaPlayer;
    import android.os.Environment;
    import android.os.IBinder;
    
    public class MyService extends Service {
    
    	// 播放器
    	private MediaPlayer mMediaPlayer;
    
    	// 音频文件
    	private File audioFile;
    
    	@Override
    	public void onCreate() {
    		super.onCreate();
    
    		mMediaPlayer = new MediaPlayer();
    
    		// 根目录
    		File sdcard = Environment.getExternalStorageDirectory();
    		audioFile = new File(sdcard, "zhangphil.mp3");
    	}
    
    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    		// 重置
    		mMediaPlayer.reset();
    
    		// 设置播放器的声音源
    		try {
    			mMediaPlayer.setDataSource(audioFile.getAbsolutePath());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		// 也可以从一个静态资源文件中加载音频数据源
    		// mMediaPlayer.create(this, R.raw.xxx);
    
    		if (!mMediaPlayer.isPlaying()) {
    			try {
    				mMediaPlayer.prepare();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    			
    			mMediaPlayer.start();
    
    			// 如果设置循环true,那么将循环播放
    			// mMediaPlayer.setLooping(true);
    		}
    		
    		return super.onStartCommand(intent, flags, startId);
    	}
    
    	@Override
    	public void onDestroy() {
    		super.onDestroy();
    
    		mMediaPlayer.stop();
    		mMediaPlayer.release();
    		mMediaPlayer = null;
    	}
    
    	@Override
    	public IBinder onBind(Intent intent) {
    		return null;
    	}
    }
    

    (5)定义的公共静态变量Constants.java:

    package zhangphil.widget;
    
    public class Constants {
    	public static final String ACTION_PLAY = "action_play";
    	public static final String ACTION_STOP = "action_stop";
    	public static final int REQUEST_CODE_PLAY = 0xd05;
    	public static final int REQUEST_CODE_STOP = 0xd06;
    }



    代码运行结果如图所示:


    附录文章:
    1,《Android桌面小部件AppWidget(1)》链接地址:http://blog.csdn.net/zhangphil/article/details/50457355
    2,《Android桌面小部件AppWidget(2)》链接地址:http://blog.csdn.net/zhangphil/article/details/50461944

    展开全文
  • 这样可以给用户提过了较好的、快捷的使用体验方式,这边是Android桌面小部件的实际意义。 下图是有道词典的一个桌面小部件的实例(另外红日的icon便是红日APP的一个简单的桌面小部件): AppWidgetProvider是...
  • Android桌面小部件与RemoteViews标签(空格分隔): Android一、简介 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一...
  • Android桌面小部件实例 桌面小时钟 AppWidegetProvider /** * Android桌面小部件实例 桌面小时钟 */ public class EX04_28 extends AppWidgetProvider { @Override public void onUpdate(Context ...
  • Android桌面小部件AppWidget(2) 在附录文章1的基础上,我再写一篇关于Android AppWidget的文章,本篇文章实现一个简单功能,此功能亦是对附录文章1所实现功能的增强和改进,本文的代码实现的功能:假设桌面小部件...
  • 如何实现Android桌面小部件(二)

    千次阅读 2017-04-23 14:07:26
    在上一篇博客中,主要从文档的角度介绍如何实现一个Android桌面小部件,本篇博客将用实例向你介绍如何实现一个Android小部件!!
  • Android桌面小部件AppWidget(2)

    千次阅读 2016-01-05 13:53:02
    Android桌面小部件AppWidget(2) 在附录文章1的基础上,我再写一篇关于Android AppWidget的文章,本篇文章实现一个简单功能,此功能亦是对附录文章1所实现功能的增强和改进,本文的代码实现的功能:假设桌面小部件...
  • android桌面小部件开发

    热门讨论 2013-07-23 19:32:20
    android系统的一个学习桌面插件的入门级代码程序,本来是想写成博客的,后来放弃了,因为写博客的水平有限,唉国语没学好啊。
  • Android小部件可以长按来自己改变部件的大小吗?怎么可以实现
  • Android桌面小部件(入门)

    千次阅读 多人点赞 2018-10-17 15:06:37
    桌面小部件的应用还是很多的,比如网易云音乐、微博等,虽然我们开发的APP并不一定需要开发这个,但简单了解学习一下还是可以的。 AppWidgetProvider是Android提供的开发小部件的类,所以我们开发小部件即只需要...
  • AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图: 图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。典型的...
  • 什么是AppWidgetAppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图:图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地...
  • 什么是AppWidgetAppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图:图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 495
精华内容 198
关键字:

android桌面小部件