- 浏览: 674976 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
Android学习08-----Android中的基本控件(下)(5)_GridView,AnalogClock与DigitalClock,Chronomete
- 博客分类:
- Android
一、网格视图: GridView
1 、 SimpleAdapter 实现
SimpleAdapterActivity.java
package com.iflytek.demo; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SimpleAdapter; public class SimpleAdapterActivity extends Activity { private GridView myGirdView = null; // 取得组件 private SimpleAdapter simpleAdapter = null; private List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.initAdapter(); // 实例化SimpleAdapter类对象 this.myGirdView = (GridView) super.findViewById(R.id.myGridView); this.myGirdView.setAdapter(this.simpleAdapter); this.myGirdView.setOnItemClickListener(new OnItemClickListenerImpl()); } private class OnItemClickListenerImpl implements OnItemClickListener { @SuppressWarnings("unchecked") @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ImageView showImg = new ImageView(SimpleAdapterActivity.this); showImg.setScaleType(ImageView.ScaleType.CENTER); // 图片居中显示 showImg.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); Map<String, Integer> map = (Map<String, Integer>) parent .getAdapter().getItem(position); showImg.setImageResource(map.get("img")); // 设置显示图片 Dialog dialog = new AlertDialog.Builder(SimpleAdapterActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("查看图片") .setView(showImg) .setNegativeButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).create(); dialog.show(); } } private void initAdapter() { Field[] fields = R.drawable.class.getDeclaredFields(); for (int x = 0; x < fields.length; x++) { if (fields[x].getName().startsWith("png_")) { Map<String, Integer> map = new HashMap<String, Integer>(); try { map.put("img", fields[x].getInt(R.drawable.class)); } catch (Exception e) { } this.list.add(map); } } this.simpleAdapter = new SimpleAdapter(this, this.list, R.layout.grid_layout, new String[] { "img" }, new int[] { R.id.img }); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView android:id="@+id/myGridView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numColumns="3" android:stretchMode="columnWidth" /> </LinearLayout>
grid_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#000000"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:padding="3px" /> </LinearLayout>
2 、 BaseAdapter
BaseAdapterActivity.java
package com.iflytek.demo; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; public class BaseAdapterActivity extends Activity { private GridView myGirdView = null; // 取得组件 private int[] picRes = new int[] { R.drawable.png_01, R.drawable.png_02, R.drawable.png_03, R.drawable.png_04, R.drawable.png_05, R.drawable.png_06, R.drawable.png_07, R.drawable.png_08, R.drawable.png_09, R.drawable.png_10, R.drawable.png_11, R.drawable.png_12, R.drawable.png_13, R.drawable.png_14, R.drawable.png_15, R.drawable.png_16, R.drawable.png_17, R.drawable.png_18, R.drawable.png_19, R.drawable.png_20, R.drawable.png_21, R.drawable.png_22, R.drawable.png_23, R.drawable.png_24 }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.myGirdView = (GridView) super.findViewById(R.id.myGridView); this.myGirdView.setAdapter(new ImageAdapter(this, this.picRes)); this.myGirdView.setOnItemClickListener(new OnItemClickListenerImpl()); } private class OnItemClickListenerImpl implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ImageView showImg = new ImageView(BaseAdapterActivity.this); showImg.setScaleType(ImageView.ScaleType.CENTER); // 图片居中显示 showImg.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); showImg.setImageResource(BaseAdapterActivity.this.picRes[position]); // 设置显示图片 Dialog dialog = new AlertDialog.Builder(BaseAdapterActivity.this) .setIcon(R.drawable.ic_launcher) .setTitle("查看图片") .setView(showImg) .setNegativeButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).create(); dialog.show(); } } }
ImageAdapter.java
package com.iflytek.demo; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context context = null; private int picIds[] = null; public ImageAdapter(Context context, int picIds[]) { this.context = context; this.picIds = picIds; } @Override public int getCount() { return this.picIds.length; } @Override public Object getItem(int position) { return this.picIds[position]; } @Override public long getItemId(int position) { return this.picIds[position]; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView img = new ImageView(this.context); img.setImageResource(this.picIds[position]); img.setScaleType(ImageView.ScaleType.CENTER); return img; } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridView android:id="@+id/myGridView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numColumns="3" android:stretchMode="columnWidth" /> </LinearLayout>
二、时钟组件: AnalogClock 与 DigitalClock
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <AnalogClock android:layout_width="wrap_content" android:layout_height="wrap_content" /> <DigitalClock android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
三、计时器: Chronometer
1 、控制计时
Chronometer02_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; public class Chronometer02_Activity extends Activity { private Chronometer myChronometer = null; private Button butStart = null; private Button butStop = null; private Button butBase = null; private Button butFormat = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.myChronometer = (Chronometer) super .findViewById(R.id.myChronometer); this.butStart = (Button) super.findViewById(R.id.butStart); this.butStop = (Button) super.findViewById(R.id.butStop); this.butBase = (Button) super.findViewById(R.id.butBase); this.butFormat = (Button) super.findViewById(R.id.butFormat); this.butStart.setOnClickListener(new OnClickListenerImplStart()); this.butStop.setOnClickListener(new OnClickListenerImplStop()); this.butBase.setOnClickListener(new OnClickListenerImplBase()); this.butFormat.setOnClickListener(new OnClickListenerImplFormat()); } private class OnClickListenerImplStart implements OnClickListener { @Override public void onClick(View v) { Chronometer02_Activity.this.myChronometer.start(); // 开始计时 } } private class OnClickListenerImplStop implements OnClickListener { @Override public void onClick(View v) { Chronometer02_Activity.this.myChronometer.stop(); // 停止计时 } } private class OnClickListenerImplBase implements OnClickListener { @Override public void onClick(View v) { Chronometer02_Activity.this.myChronometer.setBase(SystemClock .elapsedRealtime()); // 开始计时 } } private class OnClickListenerImplFormat implements OnClickListener { @Override public void onClick(View v) { Chronometer02_Activity.this.myChronometer.setFormat("新的显示格式:%s。"); } } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Chronometer android:id="@+id/myChronometer" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/butStart" android:text="开始计时" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/butStop" android:text="停止计时" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/butBase" android:text="复位" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/butFormat" android:text="格式化" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
2 、定时震动
Chronometer03_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.app.Service; import android.os.Bundle; import android.os.Vibrator; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; import android.widget.Chronometer.OnChronometerTickListener; public class Chronometer03_Activity extends Activity { private Chronometer myChronometer = null; private Button butStart = null; private Button butStop = null; private Vibrator vibrator = null; // 震动操作 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.vibrator = (Vibrator) super.getApplication().getSystemService( Service.VIBRATOR_SERVICE); // 取得震动服务 this.myChronometer = (Chronometer) super .findViewById(R.id.myChronometer); this.butStart = (Button) super.findViewById(R.id.butStart); this.butStop = (Button) super.findViewById(R.id.butStop); this.myChronometer.setFormat("当前计时时间:%s。"); this.myChronometer .setOnChronometerTickListener(new OnChronometerTickListenerImpl()); this.butStart.setOnClickListener(new OnClickListenerImplStart()); this.butStop.setOnClickListener(new OnClickListenerImplStop()); } private class OnChronometerTickListenerImpl implements OnChronometerTickListener { @Override public void onChronometerTick(Chronometer chronometer) { String time = chronometer.getText().toString() .replaceAll("[^(\\d{2}:\\d{2})]", ""); Log.i("Chronometer03_Activity", time); if ("01:00".equals(time)) { Chronometer03_Activity.this.vibrator.vibrate(new long[] { 1000, 10, 100, 100 }, 0); // 重复震动 } } } private class OnClickListenerImplStart implements OnClickListener { @Override public void onClick(View v) { Chronometer03_Activity.this.myChronometer.start(); // 开始计时 } } private class OnClickListenerImplStop implements OnClickListener { @Override public void onClick(View v) { Chronometer03_Activity.this.myChronometer.stop(); // 停止计时 } } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Chronometer android:id="@+id/myChronometer" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/butStart" android:text="开始计时" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/butStop" android:text="停止计时" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
四、标签: TabHost
1 、通过继承 TabActivity 类
TabHost01_Activity.java
package com.iflytek.demo; import android.app.TabActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class TabHost01_Activity extends TabActivity { // 继承了TabActivity private TabHost myTabHost; private int[] layRes = new int[] { R.id.tab_edit, R.id.tab_clock, R.id.tab_sex }; // 这些是内嵌布局文件的ID /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.myTabHost = super.getTabHost(); // 取得TabHost对象 LayoutInflater.from(this).inflate(R.layout.tab, this.myTabHost.getTabContentView(), true); // true表示实例化布局文件中的组件 for (int x = 0; x < this.layRes.length; x++) { TabSpec myTab = this.myTabHost.newTabSpec("tab" + x); myTab.setIndicator("标签 - " + x); myTab.setContent(this.layRes[x]); this.myTabHost.addTab(myTab); } } }
tab.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab_edit" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditText android:id="@+id/edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入检索关键字..." android:textSize="18px" /> <Button android:id="@+id/but" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜索" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab_clock" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <AnalogClock android:id="@+id/myAnalogClock" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab_sex" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RadioGroup android:id="@+id/sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <RadioButton android:id="@+id/male" android:checked="true" android:text="性别:男" /> <RadioButton android:id="@+id/female" android:text="性别:女" /> </RadioGroup> </LinearLayout> </LinearLayout>
2 、继承 Activity
TabHost02_Activity.java
package com.iflytek.demo; import android.app.Activity; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class TabHost02_Activity extends Activity { // 继承了TabActivity private TabHost myTabHost; private int[] layRes = new int[] { R.id.tab_edit, R.id.tab_clock, R.id.tab_sex }; // 这些是内嵌布局文件的ID @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.tab); this.myTabHost = (TabHost) super.findViewById(R.id.tabhost); this.myTabHost.setup(); // 建立TabHost对象 for (int x = 0; x < this.layRes.length; x++) { TabSpec myTab = this.myTabHost.newTabSpec("tab" + x); myTab.setIndicator("标签 - " + x); myTab.setContent(this.layRes[x]); this.myTabHost.addTab(myTab); } this.myTabHost.setCurrentTab(0); // 默认显示的标签索引 } }
3 、标签在下方
package com.iflytek.demo; import android.app.Activity; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class TabHost03_Activity extends Activity { private TabHost myTabHost; private int[] layRes = new int[] { R.id.tab_edit, R.id.tab_clock, R.id.tab_sex }; // 这些是内嵌布局文件的ID @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.tab); this.myTabHost = (TabHost) super.findViewById(R.id.tabhost); this.myTabHost.setup(); // 建立TabHost对象 for (int x = 0; x < this.layRes.length; x++) { TabSpec myTab = this.myTabHost.newTabSpec("tab" + x); myTab.setIndicator("标签 - " + x); myTab.setContent(this.layRes[x]); this.myTabHost.addTab(myTab); } this.myTabHost.setCurrentTab(0); // 默认显示的标签索引 } }
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1597Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2518WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1896这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3309对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2196与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1896在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2889一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1415在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 1997一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1626一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 2022传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3508一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2040一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1518一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2265Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1740Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1554在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2320导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1287Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 2012在一个项目之中,会由多个 Activity ...
相关推荐
### Android控件及布局的使用知识点详解 #### 第一章:Android基础 ...通过以上知识点的学习,开发者可以更深入地理解Android控件及布局的应用,并能够熟练地在自己的应用中使用这些控件来提升用户体验。
- **4.6.1 AnalogClock和DigitalClock类简介**:介绍模拟时钟和数字时钟控件的特点及其使用方法。 - **4.6.2 时钟控件使用案例**:通过实例展示时钟控件的应用技巧。 - **4.7 日期与时间选择控件** - **4.7.1 ...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
在Android开发中,`View`是最基本的UI组件,所有可见的用户界面元素都是通过继承`View`类实现的。`View`类定义了控件的行为和外观,并且提供了绘制、布局、处理触摸事件等功能。本文档将详细介绍Android2.2版本中的`...
- **4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理** 介绍了两种显示时间的方式:模拟时钟(AnalogClock)和数字时钟(DigitalClock),并探讨了它们的实现原理。 - **4.15 动态输入日期与时间——...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示...
Android UI类继承关系图描述了Android开发中,用户界面组件之间的层次结构和继承关系。在Android开发中,UI组件构建在一种称为View的类之上,View又是Object的子类,构成了一个庞大的类体系。通过继承关系图,开发者...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
在Android开发中,遵循一套规范是非常重要的,它能提高代码的可读性、可维护性和团队协作效率。以下是一些关键的Android开发规范和注意事项: **布局方面:** 1. **优先使用线性布局(LinearLayout)**,因为它简单...
4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...
AnalogClock、DigitalClock 68 单选框、复选框、开关状态按钮 69 单项选择(RadioGroup、RadioButton) 69 复选框(CheckBox) 71 开关状态按钮(ToggleButton) 73 下拉列表框Spinner 74 ScrollView、...