Android开发之道(5)Widget、Activity与Intent

Android 创建桌面组件Widget——构建应用微件(一) 用户可以在其主屏幕面板间移动微件,如果系统支持,用户还可以调整微件的大小,按照他们的偏好量身定制微件中的信息量。定义应用微件的初始布局,在 XML 中定义。这是一个可选的 Activity,在用户添加您的应用微件时启动,并允许用户在应用微件创建时修改其设置。定义应用微件的基本特性,如应用微件的最小布局尺寸、应用微件的初始布局资源、应用微件的更新频率,以及(可选)在应用微件创建时启动的配置。与控制微件的互动不一定会转到关联的详情视图,具体取决于控制微件的功能是否生成了数据集(例如,在使用搜索微件时)。 阅读详情

转载请注明来自“柳大的优快云博客”:http://blog.youkuaiyun.com/poechant


一、Widget


1、TextView


每个 Widget 都有很多属性,有一些属性是几乎每个 Widget 都有的,比如“id”、“layout_width”、“layout_height”。下面以 TextView 的几个常用属性为例,作为一个示范。


<TextView 

   android:id="@+id/text_view" 

   android:text="@string/text_view" 

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"/>


2、RadioGroup和RadioButton


这里再以 RadioGroup 和 RadioButton 为例,设置七个不同的 RadioButton 分别为“Red、Orange、Yellow、Green、Cyan、Blue、Purple”七种颜色。下面是 res/layout/main.xml 布局文件中的主要代码。


<RadioGroup 

   android:id="@+id/RadioGroup"

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content">

<RadioButton 

   android:id="@+id/RadioButton01" 

   android:text="@string/radio_button_red"

   android:textColor="@color/red"

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"/>

<RadioButton 

   android:id="@+id/RadioButton02"

   android:text="@string/radio_button_orange"

   android:textColor="@color/orange"

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"/>

<RadioButton 

   android:id="@+id/RadioButton03" 

   android:text="@string/radio_button_yellow"

   android:textColor="@color/yellow"

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"/>

<RadioButton

   android:id="@+id/RadioButton04"

   android:text="@string/radio_button_green"

   android:textColor="@color/green"

   android:layout_width="wrap_content" 

   android:layout_height="wrap_content"/>

<RadioButton

   android:id="@+id/RadioButton05"

   android:text="@string/radio_button_cyan"

   android:textColor="@color/cyan"

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"/>

<RadioButton

   android:id="@+id/RadioButton06"

   android:text="@string/radio_button_blue"

   android:textColor="@color/blue"

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"/>

<RadioButton

   android:id="@+id/RadioButton07"

   android:text="@string/radio_button_purple"

   android:textColor="@color/purple"

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"/>

</RadioGroup>


变量文件在这里就省略了。运行程序后的效果如下:




3、其他 Widget


其他常用的 Widget 还包括:View、ImageButton、Button、EditText、CheckBox、ImageView。这些可以参考 Android API 文档。下面介绍添加 Widget 的监听事件。


二、监听器


1、为 Button 添加一个监听器


以为一个 Button 创建监听器为例,为点击 Button 事件设置监听器,实现对按钮上的 Text 内容的修改。具体说就是载入时 Button 上的 Text 为“Click Me!”,点击后改变为“Clicked”,再点击则变为“Click Me!”,如此反复。实现这个功能的代码如下:


    final Button button = (Button) findViewById(R.id.button);

    button.setOnClickListener(new Button.OnClickListener() {


        @Override

        public void onClick(View v) {

            String buttonText = button.getText().toString();

            if (buttonText.equals("Click Me!")) {

                button.setText("Clicked");

            } else {

                button.setText("Click Me!");

            }

        }

    

    });


先通过 findViewById(R.id.button) 获取到我们创建的 button 按钮,然后类型转换为 Button,再为 button 设置监听器。程序运行效果如下:






2、实现切换两个 Activity


Activity 是最基本的模块,简单地说,一个 Activity 一般就是一个独立的屏幕。每个 Activity 由一个类来实现。比如我们实现 HelloWorldActivity.java 和 GoodbyeActivity.java 两个文件分别是两个 Activity 。而且这些自定义的 Activity 类要继承 Activity 类。一般来说,一个 Android 应用都是由多个 Activity 组成的。比如一个简单音乐播放器软件,一个 DisplayActivity 用来显示音乐播放界面,一个 ItemListActivity 用来显示音频文件列表。那么一个关键问题就出现了。如何实现两个界面之间的切换,也就是两个 Activity 之间的切换?


Android 提供 Intent 类,来实现不同的 Activity 之间的切换。当切换到一个新的 Activity 时,旧的 Activity 被保存在栈里,以备用户执行返回操作。接下来就具体说下如何用 Intent 实现 Activity 之间的切换。


首先创建两个类,分别是 HelloWorldActivity.java 和 GoodbyeActivity.java。其中 HelloWorldActivity.java 实现如下:


public class HelloWorldActivityextends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main1);

    

        final Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new Button.OnClickListener() {


            @Override

            publicvoid onClick(View v) {

                Intent intent = new Intent();

                intent.setClass(HelloWorldActivity.this, GoodbyeActivity.class);

                startActivity(intent);

                HelloWorldActivity.this.finish();

            }

    

        });

    }

}


可以看到,点击 button 后,会创建一个 Intent 对象,然后调用 setClass 方法,第一个参数就是当前的 Activity,第二个参数是所要切换到的 Activity 类。然后调用 startActivity 方法即实现了 Activity 切换。最后结束当前的 HelloWorldActivity,其被保存到栈中。而另一个 GoodbyeActivity 类中不同的是,加载 res/layout/main2.xml 布局文件,即 R.layout.main2。它们的布局文件的内容是一样的,分别有一个名为 button 的 Button。两个 Button 的 android:text 属性分别设置为 res/values/strings.xml 文件中的两个不同的 string。布局文件较简单,这里略去。res/values/strings.xml 中的两个 string为:


    <stringname="button_text1">Hello World</string>

    <stringname="button_text2">Goodbye</string>


另外要说到的,就是 AndroidManiFest.xml 文件,由于涉及到 intent,其中的 application 应如下编写:


    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name">

        

        <activity

            android:name=".HelloWorldActivity"

            android:label="@string/app_name">

            <intent-filter>

                <actionandroid:name="android.intent.action.MAIN"/>

       <categoryandroid:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

        </activity>

        

        <activity

            android:name=".GoodbyeActivity">

        </activity>

        

    </application>


然后运行这个应用,首先出现如下界面:




点击按钮后,界面转换到 GoodbyeActivity,如下:




如果我们为监听器设置的动作,为进行 setText 方法,则与上面实现的效果是一样的。但是这里只是做一个简单的演示,如果要实现一个实用的应用(比如上面提到的音乐播放器),则一定要用到多个 Activity,而不应仅仅是改变当前的 Widget 属性。


先到这里吧,感谢您的关注!


转载请注明来自“柳大的优快云博客”:http://blog.youkuaiyun.com/poechant


Android Activity间数据回调:startActivityForResult原理与实战 在Android应用开发中,组件间通信是构建交互式应用的基础。Activity作为核心组件,其间的数据传递与回调机制是实现复杂业务流的关键。通过Intent进行数据封装与传递,结合请求码(requestCode)和结果码(resultCode)的契约模式,构成了一个清晰的异步回调模型。这一机制的技术价值在于解耦了界面跳转与结果处理,使得数据流向可控、逻辑清晰。其典型应用场景包括用户信息编辑、图片选择、权限申请后的结果回调等。本文以用户信息编辑为例,深入剖析了startActivityForResult与on 阅读详情

相关推荐

Android Widget更新机制深度解析与优化实践

Widget作为Android系统的核心组件,通过AppWidgetProvider实现跨进程动态更新,是提升用户体验的关键技术。其底层依赖RemoteViews的序列化传输机制,在Launcher、AppWidgetService和宿主应用间形成数据流闭环。在移动开发领域,高效的Widget更新策略需要平衡实时性与资源消耗,常见优化手段包括视图复用、批量操作和智能节流。针对天气、新闻等高频更新场景,开发者可采用WorkManager调度后台任务,结合差异化更新检测显著降低性能开销。本文通过剖析Widget

weixin_33713707的博客 368

android widget 启动activity,android之appwidget(二)启动新activity

紧接上集,appwidget的周期函数对应的事件:onUpdate:到达指定时间之后或者用户向桌面添加appwidget时候会调用这个方法。onDelete:当appwidget被删除时,会调用这个方法。onEnable:当一个appwidget第一次被创建,会调用这个方法。onDisable:当最后一个appwidget实例被删除后,会调用这个方法。onReveice:接受广播事件。调试出来了么...

weixin_34981046的博客 1342

Unity开发Android桌面悬浮窗精灵:透明Activity与WindowManager实战

在移动应用开发中,混合开发技术结合了游戏引擎的丰富表现力与原生平台的系统级能力,为创新交互提供了可能。其核心原理在于通过跨平台引擎(如Unity)处理复杂图形渲染与逻辑,同时借助原生系统API(如Android的WindowManager)实现窗口管理与系统集成。这种技术方案的价值在于能够突破传统应用边界,创建常驻、可交互的系统级组件,广泛应用于桌面小工具、动态壁纸、品牌营销互动等场景。本文聚焦于Unity与Android原生开发深度整合,通过透明背景Activity与系统悬浮窗机制,实现一个可常驻桌面的3

weixin_33858336的博客 296

android widget 开发实例

本文转载自 silenceburn 大师 桌面便签软件是android上常用软件的一种,比如比较早的Sticky Note,就曾非常流行,Sticky Note的介绍可以参见 http://www.tompda.com/c/article/11778/ 而实际上使用android平台对widget开发的支持,桌面便签类软件是非常易于开发的。本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法。1.MyNote的最终实现效果为了提起大家阅读本文的兴趣,先介绍一下最终实现的效果。首

chenlb206的专栏 3040

使用IntelliJ IDEA从零构建安卓APK:环境配置与HelloWorld实战

安卓开发作为移动应用开发的核心领域,其本质是基于Java/Kotlin语言,通过Dalvik/ART虚拟机执行字节码的应用构建过程。其技术原理围绕SDK工具链、Gradle构建系统和APK打包机制展开,旨在实现跨设备部署。掌握安卓开发的价值在于能够创建覆盖数十亿设备的原生应用,涉及电商、社交、工具等多个高需求场景。本文聚焦于使用IntelliJ IDEA这一集成开发环境进行安卓项目创建,详细解析了包括JDK配置、SDK独立部署在内的环境搭建步骤,并深入演示了从编写布局文件到实现活动逻辑的完整开发流程,最终完

weixin_33738982的博客 421

AndroidStudio简单实现单击Widget打开Activity

使用AndroidStudio开发环境实现单击Widget打开Activity

为AppWidget添加配置Activity

文章目录前言 前言     在构建自己的窗口小部件的时候,为了更加定制化,会根据用户的喜好,让用户选择小部件的样式等,这种情况下,就需要为窗口小部件添加一个配置页面了。在用户添加窗口小部件的时候,会弹出配置页面 关于构建AppWidget相关内容参考:为你的Android应用构建窗口小部件(App Widget) ...

yingaizhu的博客 811

android之appwidget(二)启动新activity

NULL 博文链接:https://hanllove001.iteye.com/blog/1185166

最新安卓版本对照表,API对照表(持续更新,更新到安卓17)

话不多说,直接上表,持续更新(更新到安卓16)。 列出了所有记录的可能会影响应用开发者的功能和行为变更。请使用此列表查找影响您的变更,然后点击相应的链接以阅读文档。下表列出了所有记录的可能会影响应用开发者的功能和行为变更。请使用此列表查找影响您的变更,然后点击相应的链接以阅读文档。Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

雨季余静的博客 9万+

Android实验二:Activity的生命周期及Intent

1、设计界面,包括四个按钮,两个文本框。单击对应按钮可以启动对应activity。假定Activity A为启动Activity。 2、修改 Activity 的启动模式 LaunchMode,并通过 Log 信息来体会不同启动模式所对应的Activity 和 task 的关系

anaconda的conda国内加速镜像源(pytorch 快速安装)

最近清华源不太好使了,所以推荐中科大镜像源,如下 1.还原原始通道 conda config --remove-key channels 2.

qq_41719643的博客 2万+

android widget 点击事件,Android Widget中AppWidget按钮事件

Android Widget中appWidget按钮事件是本文要介绍的内容,主要是了解并学习Android Widget应用中appWidget事件,具体内容的实现来看本文详解。在appWidget中,ImageButton和Button都是被支持的控件,其事件可分成三种类型:一、开启Activity1、首先先定义个开启Activity的intenteg:IntentfullIntent=newI...

weixin_31510505的博客 927

PX4无人机实战:手把手教你用MAVROS实现Offboard模式(附避坑指南)

本文提供了一份详尽的PX4无人机Offboard模式实战指南,重点解析了如何通过MAVROS实现从仿真到实机的控制。内容涵盖硬件连接、串口权限设置、MAVROS配置、核心代码编写以及实机操作全流程,并附有详细的避坑指南和故障排查手册,帮助开发者快速掌握ROS与PX4飞控的集成开发。

weixin_29172201的博客 267

Android开发入门:从Empty Activity开始掌握核心概念与实战

在移动应用开发中,Activity作为Android四大组件之一,是用户界面的基本载体,负责管理应用与用户的交互。其工作原理基于生命周期回调机制,系统通过调用onCreate、onStart、onResume等方法管理组件的创建、可见与交互状态。掌握Activity对于构建健壮的应用至关重要,它直接影响用户体验和性能优化。在实际开发场景中,合理运用Activity生命周期可以优化资源管理、提升响应速度。本文以Empty Activity为切入点,深入解析Activity与布局文件的绑定机制,并演示如何通过视

weixin_34166472的博客 318

Design Compiler时序约束实战:如何用set_clock_uncertainty解决时钟抖动问题?

本文深入探讨了在Design Compiler时序约束实战中,如何精准运用set_clock_uncertainty命令解决时钟抖动等非理想性问题。文章详细解析了该命令在时钟树综合前后的不同应用策略、建立时间与保持时间的差异化设置,并对比了其与set_clock_jitter的适用场景,旨在帮助数字IC设计工程师制定稳健的时序约束,为后端物理实现预留合理的安全裕量,从而高效达成时序收敛。

weixin_29196891的博客 300

Abaqus传热分析HETVAL和USDFLD子程序联合

Hetval子程序常用于定义内部热源,该子程序可以定义材料内部的生热量(如相变、高分子结晶生热),并且能够调用state variable 状态变量,可以与USDFLD子程序联合使用。HETVAL子程序用于计算传热系数并在单元上定义,USDFLD子程序用于在每个时间布更新温度场。

qq_41900477的博客 2662

Android入门教程之Activity(生命周期,启动...)

Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。

Android23333的博客 9万+

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南

pyrealsense2:Intel RealSense 深度相机的 Python 接口实战

weixin_43988131的博客 4351

Android Widget更新机制与Launcher优化实践

Widget作为Android系统的动态UI组件,其核心原理是通过AppWidgetProvider与AppWidgetHost的跨进程通信实现数据交互。从技术实现看,Widget更新涉及Binder机制、视图序列化等底层技术,需处理系统版本差异和性能优化问题。典型的更新触发模式包括定时轮询、事件驱动和主动请求三种方式,开发者需根据场景选择AlarmManager或JobScheduler等调度策略。在Launcher开发中,通过预加载ProviderInfo、实现更新队列节流等优化手段,可显著提升Widg

weixin_30825199的博客 465

Kali Linux实战:用Impacket的secretsdump.py快速提取Windows域控哈希(附避坑指南)

本文详细介绍了如何在Kali Linux中使用Impacket的secretsdump.py脚本快速提取Windows域控哈希,包括环境准备、原理剖析、实战操作及常见问题解决方案。特别适合CTF竞赛和网络信息安全爱好者学习,提升渗透测试效率。

weixin_33670786的博客 410

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1707

android widget 开发实例 : 桌面便签程序的实现详解和源码 (下)

转载自http://blog.youkuaiyun.com/silenceburn/article/details/6094705 书接上文 android widget 开发实例 : 桌面便签程序的实现详解和源码 (上) 地址是:http://blog.youkuaiyun.com/silenceburn/archive/2010/12/23/6093074.aspx   在上半部分中,已经

qq_31917203的博客 619

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1325
上一篇: 中文字符编码之GBK,UTF-16和UTF-8
下一篇: 迈出从3K到1W的重要一步——掌握设计模式
izard999
博客等级 码龄18年 375粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值