求助,免DVD补丁打上还是需要gta5免登录补丁

4.8 自定义下拉菜单模式---Spinner与setDropDownViewResource - 每天用两个小时来学习新的知识 - ITeye博客
博客分类:
package com.
import android.app.A
import android.os.B
import android.view.MotionE
import android.view.V
import android.view.animation.A
import android.view.animation.AnimationU
import android.widget.AdapterV
import android.widget.ArrayA
import android.widget.S
import android.widget.TextV
public class Ex04_08_spinner extends Activity {
private static final String[] countriesStr =
{"北京","上海","天津","广东"};
private TextView myTextV
private Spinner myS
private ArrayAdapter&String&
Animation myA
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myTextView = (TextView) findViewById(R.id.myTextView);
mySpinner = (Spinner) findViewById(R.id.mySpinner);
adapter = new ArrayAdapter&String&(this,
android.R.layout.simple_spinner_item, countriesStr);
//myspinner_dropdown为自定义下拉菜单样式 定义在res/layout目录下
adapter.setDropDownViewResource(R.layout.myspinner_dropdown);
//将ArrayAdapter添加到Spinner对象中
mySpinner.setAdapter(adapter);
//将mySpinner添加OnItemSelectedListener
mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
public void onItemSelected(AdapterView&?& arg0, View arg1, int arg2,
long arg3)
//将所选mySpinnner的值带入myTextview
myTextView.setText("选择的是" + countriesStr[arg2]);
//将mySpinner显示
arg0.setVisibility(View.VISIBLE);
public void onNothingSelected(AdapterView&?& arg0)
// TODO Auto-generated method stub
//取得Animation定义在res/anim目录
myAnimation = AnimationUtils.loadAnimation(this, R.anim.my_anim);
//将mySpinner添加OnTouchListener
mySpinner.setOnTouchListener(new Spinner.OnTouchListener()
public boolean onTouch(View v, MotionEvent event) {
//将mySpinner运行Animation
v.startAnimation(myAnimation);
//将mySpinner隐藏
v.setVisibility(View.INVISIBLE);
mySpinner.setOnFocusChangeListener(new Spinner.OnFocusChangeListener()
public void onFocusChange(View v, boolean hasFocus)
// TODO Auto-generated method stub
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/white"
android:id="@+id/myTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/title"
android:textColor="@drawable/black"
&/TextView&
android:id="@+id/mySpinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
&/Spinner&
&/LinearLayout&
myspinner_dropdown.xml
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="24sp"
android:singleLine="true"
style="?android:attr/spinnerDropDownItemStyle" /&
my_anim.xml
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android="/apk/res/android"&
&translate
android:fromXDelta="0"
android:toXDelta="-100%p"
android:duration="300"
&/translate&
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="300"&
浏览: 102937 次
来自: 茂名
很好,正需要要!用来在thread和activity之间传数 ...
只能读取TXT格式的文件,而不能读取图片
我也在调查这个问题,谢谢!
谢谢各位的评论,楼下的建议很好,值得大家注意了.
非常感谢你提供的这个方法,但我经过测试之后,发现这个方法存在弊 ...拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(37ec16-ua98).
重新安装浏览器,或使用别的浏览器自定义组合控件:SherlockSpinner - 简书
自定义组合控件:SherlockSpinner
如果你觉得从头开始自定义一个View比较麻烦,那么组合几个系统现有控件来实现需求的功能,会是你很好的一个选择。
最近在项目中,需要使用Spinner来实现下拉选择功能,UI方面倒是要求不多。但是难点在于一个界面中有多个Spinner,并且有联动关系,数据需要在点击Spinner的时候请求服务器。而且当前Spinner数据依赖于前面选择的一个或多个结果,当获取到最新数据后,才显示下拉选项。
比如说我需要先选择一个仓库,再选择项目(依赖前面选择的仓库),再选择一个批次(依赖前面选择的仓库和项目),如果我在选择完仓库时,就去判断来预加载项目和批次的数据,会使依赖逻辑变得非常复杂。
这时候就想在每次点击一个Spinner的时候,去判断依赖的选项是否已经选择,未选择就提示需先选择;如果已选择,则进行网络请求,加载数据显示到下拉选项中。
(本例使用选择语言来进行演示。)
二、使用系统Spinner
1. 首先,我想到的便是使用系统的Spinner,说干就干,XML先上:
android:id="@+id/spn_languages"
android:layout_width="match_parent"
android:layout_height="36dp"/&
2. 然后代码设置Adapter匹配数据、设置OnItemSelectedListener绑定item选择的事件:
spnLanguages = (Spinner) findViewById(R.id.spn_languages);
ArrayAdapter&String& mAdapterSystemSpinner = new ArrayAdapter&String&(this, android.R.layout.simple_list_item_1, mLanguages);
spnLanguages.setAdapter(mAdapterSystemSpinner);
spnLanguages.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView&?& parent, View view, int position, long id) {
showMessage("Select " + mLanguages[position]);
public void onNothingSelected(AdapterView&?& parent) {
showMessage("Select Nothing.");
OK,现在Spinner可以使用了:
3. 接着我们来设置点击事件
spnLanguages.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showMessage("Click Spinner");
什么情况,运行后直接崩了?
FATAL EXCEPTION: main
Process: com.sherlockshi.widget.sherlockspinner, PID: 11757
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sherlockshi.widget.sherlockspinner/com.sherlockshi.widget.MainActivity}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
at android.widget.AdapterView.setOnClickListener(AdapterView.java:798)
at com.sherlockshi.widget.MainActivity.initSystemSpinner(MainActivity.java:169)
at com.sherlockshi.widget.MainActivity.onCreate(MainActivity.java:48)
简单来说就是,AdapterView不能设置Click事件,看下Spinner源码,确实是继承自AdapterView。(至于为什么AdapterView不能设置Click事件,这个暂未深究。)
4. 那我们就设置Touch事件喽:
spnLanguages.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
showMessage("Touch Spinner");
这下确实是可以响应点击事件了,但是响应完,下拉选择就直接显示出来了,无法满足我们的需求。
而且Spinner还有个问题,一进入界面的时候,默认就会选择第一项,而我们并不需要这样的默认值。
二、CustomSpinner = EditText + ListPopupWindow
那我们是否可以使用别的控件,来实现相同的功能呢?答案是肯定的,我们用EditText来接收点击事件,而在请求完数据之后,使用ListPopupWindow来显示下拉选项,选择EditText的原因主要有以下几点:
默认在底部会有带颜色的横线,Material Design风格的EditText看起来效果很不赖
EditText可以方便的配置上、下、左、右四个位置的小图标,我们可以在右侧放置一个向下的三角箭头,使它看起来像一个系统的Spinner
而选择ListPopupWindow则是因为:
可以方便的使用下拉列表
可以自由设置锚点
1. XML布局
布局文件依旧很简单,只要一个简单的EditText,配上一个右侧的下拉图标:
android:id="@+id/et_languages"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:drawableRight="@drawable/ic_dropdown"
android:hint="Please Select..."/&
2. 代码中创建ListPopupWindow
此部分包含以下逻辑:
初始化ListPopupWindow,并关联到EditText上
当点击EditText时,请求数据,请求完成后,显示ListPopupWindow
选中ListPopupWindow的某一项后,将此项内容更新到EditText中,并隐藏ListPopupWindow
etLanguages = (EditText) findViewById(R.id.et_languages);
etLanguages.setKeyListener(null); // 设置EditText不可编辑,等同于在xml中设置editable="false"
lpwLanguages = new ListPopupWindow(this);
mAdapterLanguages = new ArrayAdapter&String&(this, android.R.layout.simple_list_item_1, mLanguages);
lpwLanguages.setAdapter(mAdapterLanguages);
lpwLanguages.setAnchorView(etLanguages); //设置ListPopupWindow的锚点,即关联PopupWindow的显示位置
lpwLanguages.setModal(true); // 是否为模态,当设置为true时,会处理返回按键的事件
lpwLanguages.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view, int position, long id) {
showMessage("Select " + mLanguages[position]);
etLanguages.setText(mLanguages[position]);
lpwLanguages.dismiss();
// 如果使用onClick事件,会出现第一次点击只获取焦点,第二次点击才出现下拉
etLanguages.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Do what you want
getDataFromNet();
public void getDataFromNet() {
// 延时2秒后,修改源数据,用来模拟网络请求
new Thread(new Runnable() {
public void run() {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
mLanguages[1] = "C+++++++++++++";
mAdapterLanguages.notifyDataSetChanged();
runOnUiThread(new Runnable() {
public void run() {
lpwLanguages.show();
}).start();
实现效果如下所示:
EditText配合ListPopupWindow组合实现Spinner的功能,使用起来倒是简单,逻辑也挺清晰的,但是如果界面上有三四个Spinner,那不是就得把类似的代码写上三四遍?
其实我们并不关心内部是用ListPopupWindow或者其它的控件来实现,也不想处理任何关于ListPopupWindow的细节。我们关心的只有Spinner的初始化、适配数据、Item选择事件(ItemClick事件),如果可以,就再加上Spinner的点击事件(Click或Touch事件)、自由控制Spinner的显示时机。
那有没有简单易用的方法,可以直接像使用系统的Spinner一样,来使用EditText和ListPopupWindow的组合呢?并且可以提供Spinner的点击事件?答案是肯定的,详情且看下一节。
三、自定义组合控件
在第二部分我们可以看出,我们的控件要满足以下两大功能:
像系统Spinner一样简单易用:初始化、适配数据、Item选择事件(ItemClick事件)
支持点击事件(Click或Touch事件),自由控制下拉框显示时机
由于控件源码稍长,就不贴出来了,有兴趣可以点击文末的Github链接,源码也比较简单,只是进行控件的组合,并提供相应的方法进行调用,下面主要介绍下使用方法。
1. 引入依赖
dependencies {
compile 'com.sherlockshi.widget:sherlockspinner:1.0.2'
2. 使用方法
2.1 像使用系统Spinner一样,在XML文件中使用:
&com.sherlockshi.widget.SherlockSpinner
android:id="@+id/sherlock_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:lineColor="#00FF00"
android:hint="Please Select..."/&
SherlockSpinner有以下属性:lineColor: 设置底部横线的颜色同时支持使用代码进行配置:mSherlockSpinner.setLineColor(0x00FF00);
由于SherlockSpinner继承自EditText, 所以你可以使用EditText的其它属性,例如gravity、textSize、textColor...
2.2 还是像使用系统Spinner一样,在代码中设置Adapter和ItemClickListener:
mSherlockSpinner = (SherlockSpinner) findViewById(R.id.sherlock_spinner);
ArrayAdapter&String& mAdapterLanguages = new ArrayAdapter&String&(this, android.R.layout.simple_list_item_1, mLanguages);
mSherlockSpinner.setAdapter(mAdapterLanguages);
mSherlockSpinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view, int position, long id) {
showMessage("Select " + mLanguages[position]);
以上,就可以像系统Spinner一样使用SherlockSpinner了,如果没有别的需求,这样也就够用了。如果你有点击请求网络数据,再异步显示下拉框的需求,可以看第3步的使用方法。
2.3 (可选) 如果你想在异步加载数据后,再显示出更新后的数据,你可以使用它的点击事件来处理
记住:在获取数据后,你必须手动调用sherlockSpinner.show()方法来显示SherlockSpinner的下拉选项
mSherlockSpinner.setOnClickListener(new SherlockSpinner.OnClickListener() {
public void onClick(View v) {
getDataFromNet();
public void getDataFromNet() {
// after delay 2s, modify the source data, to simulate net request
new Thread(new Runnable() {
public void run() {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
mLanguages[4] = "Javaaaaaaaaaaa";
mAdapterLanguages.notifyDataSetChanged();
// then you must manually call sherlockSpinner.show()
runOnUiThread(new Runnable() {
public void run() {
mSherlockSpinner.show();
}).start();
3. 更多属性
由于SherlockSpinner继承自EditText,所以你可以使用EditText的其它属性,例如gravity、textSize、textColor...
SherlockSpinner还有一个属性,可以设置下拉框的显示位置,即锚点设置:
mSherlockSpinner.setAnchorView(findViewById(R.id.llyt_anchor));
效果如下图中4和5的区别,在第4部分中,下拉框停靠在Spinner上;而第5部分中,下拉框停靠在Spinner所在的整行布局上,宽度更大。
另外,一个小小的Tip:在styles.xml文件中配置以下代码,可使下拉框带上漂亮的分割线:
&style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"&
&item name="android:dropDownListViewStyle"&@style/mySpinnerStyle&/item&
&style name="mySpinnerStyle" parent="android:Widget.ListView.DropDown"&
&item name="android:divider"&#E0E0E0&/item&
&item name="android:dividerHeight"&0.1dp&/item&
项目代码已共享到Github:欢迎fork、star、issue。
PS:欢迎关注
Don't be evil.&Android用户界面之常用控件Spinner
Android用户界面之常用控件Spinner
视频太卡?试试切换线路
本课时针对课程内容进行简要讲解。
本课时介绍移动开发操作系统的发展历史,对Android的各个版本逐一回顾,简单讲解Android开发框架的构成,帮助大家快速了解Android体系的整体情况。
本课时学习如何搭建Android的开发环境。
本课时学习如何编写一个Android应用程序,通过这一课的学习,完成第一个Android应用的开发。
Activities是一个程序的组件之一,主要功能是提供界面。本课时介绍Android 四大核心组件之Activity的生命周期等内容。
Activities是一个程序的组件之一,主要功能是提供界面。本课时介绍Android 四大核心组件之Activity的生命周期等内容。
Android四大核心组件之Service与Activity不同,虽然看不到,但非常重要。本课时主要介绍Service的使用。
Android四大核心组件之Service与Activity不同,虽然看不到,但非常重要。本课时主要介绍Service的使用。
Broadcast是广播,和Android内的事件一样,它可以发出一个广播(事件),注册了该广播接收器(事件监听器)的所有组件都会接收到该广播,从而调用自己的响应方法(事件响应处理)。本课时主要介绍Broadcast Receiver的使用方法。
Content Provider是内容提供器,与内容(数据)的存取(存储、获取)有关,是Android应用程序的四大组成部分之一,是Android中的跨应用访问数据机制。本课时主要介绍Content Provider的使用方法。
Intent是同一个或不同的应用中的组件之间的消息传递的媒介,是一个将要执行动作的抽象描述,一般来说是作为参数来使用。 本课时主要介绍Intent的使用方法。
Intent是同一个或不同的应用中的组件之间的消息传递的媒介,是一个将要执行动作的抽象描述,一般来说是作为参数来使用。 本课时主要介绍Intent的实现方法。
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)和TableLayout(表格布局)。本课时讲解如何在Android中进行界面布局。
ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。本课时主要介绍ListView的使用方法。
ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。本课时主要介绍ListView的使用方法。
ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。本课时主要介绍ListView的使用方法。
本课时介绍Android中如何使用RadioGroup和RadioButton,实现自定义的RadioGroup中被选中RadioButton的变更监听事件。
CheckBox是多项选择,允许用户用列表中选择一个或多个选项, 它在android源代码中是继承CompoundButton类的,而CompoundButton类是继承于Button类的。本课程课时介绍了CheckBox的使用方法。
DatePicker是一个选择年月日的日历控件。本课时主要介绍DatePicker的使用方法。
TimePicker概述:TimePicker也继承自FrameLayout类,时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择,如果要捕获用户修改时间数据的事件,便需要为TimePicker添加 OnTimeChangedListener监听器。本课时讲解TimePicker的使用。
Spinner位于android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器,Spinner是View类的一个子类。本课时介绍Spinner的使用方法。
ProgressBar是一个进度条控件,当用户在后台执行一些任务时,在前台展示的信息,用于表示任务正在处理,请用户等待或者给用户展示处理的进度消息等,它在android源代码中是直接继承View类的。本课时介绍ProgressBar的使用方法。
SeekBar控件其实是相对高级的进度条,是可以拖动的,可以改变进度的一个进度条控件。本课时介绍SeekBar的使用方法。
GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。本课时介绍GridView的使用方法。
ProgressDialog,顾名思义,就是一个进度对话框,常用于显示载入进度、下载进度等,合理使用ProgressDialog能增加用户体验,让用户知道现在程序所处的状态。本课时介绍ProgressDialog的使用方法。
Notification是Android中常用的一种通知方式,当有未读短信或未接电话的时候,屏幕状态栏就会有提示图标,这时可以下拉状态栏来读取通知。在使用微信的时(微信在后台运行),如果有新消息时便会发出声音提示,状态栏也有相应的微信提示。本课时介绍Notification的使用方法。
ScrollView滚动视图是指当拥有很多内容,屏幕显示不完时,需要通过滚动跳来显示的视图。ScrollView只支持垂直滚动。本课程介绍了ScrollView的使用方法。
RatingBar是SeekBar和ProgressBar的扩展,用星星来评级,使用的默认大小RatingBar时,用户可以触摸/拖动或使用键来设置评分,它有大小两种样式,其中大的只适合指示,不适合于用户交互。本课时介绍RatingBar的使用方法。
ImageSwitcher类提供了图片切换功能,通过第三方的操作,设置当前ImageSwitcher显示的图片,同时设置图片变换的动画。本课时介绍ImageSwitcher的使用方法。
Gallery组件主要用于横向显示图像列表,不过按常规做法。Gallery组件只能有限地显示指定的图像。本课程介绍了Gallery的使用方法。
BaseAdapter是经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter。本课时介绍BaseAdapter的使用方法。
Android计算器是入门学习阶段最有趣的一个应用程序,本课时主要介绍实现一个简单Android计算器的所需要掌握的基本布局方法。
Android计算器是入门学习阶段最有趣的一个应用程序,本课时主要介绍实现一个简单Android计算器的具体实现方法。
Android中的后退事件在很多应用中被用到,给用户带来的方便之处妙不可言,非常友好的体现了Android的人机交互过程。本课时主要介绍后退事件中的使用方法。
AutoCompleteTextView是实现动态匹配输入的内容,如google搜索引擎当输入文本时可以根据内容显示匹配的热门信息。本课时介绍AutoCompleteTextView的使用方法。
EditText是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到想要的数据。本课时介绍EditText的使用方法。
在一个Android工程中,可能会使用大量的字符串作为提示信息,这些字符串都可作为字符串资源声明在配置文件中,从而实现程序的可配置性。本课时介绍字符串资源的使用方法。
本课时介绍国际化多语言的使用方法。
Android中颜色资源文件,几乎囊括了常用的各种颜色,选择颜色的时候一目了然,不必再为调色发愁。本课时介绍颜色资源的使用方法。
我们可以使用一些常用的尺寸单位来定义一些文字尺寸、视图组件的宽和高等,尺寸资源是一个数字类型的数据,被定义在res\values\dimens.xml文件中。本课时介绍尺寸资源的使用方法。
数组资源也就是一串字符串或者整数列表,经常被用于Menu和Spinner选项的保存。本课时介绍数组资源的使用方法。
Android SDK提供了一个强大的类Drawable。本课时介绍Drawable资源的使用方法。
样式是用于描述一个View或是一个窗口的显示属性的集合,样式可以指定如高度,填充,字体颜色,字体大小,背景颜色等属性。本课时介绍样式和主题的使用方法。
菜单是任何应用程序的一个重要部分,提供了透露应用程序功能和设置的通用接口。Android为开发者提供了一个简单的编程接口来实现各种条件下的标准化应用程序菜单。本课时介绍菜单资源的使用方法。
在androd手机中处理XML数据时很常见的事情,通常在不同平台传输数据的时候,就可能使用XML,XML是与平台无关的特性,被广泛运用于数据通信中。本课时介绍XML的使用方法。
在Android应用中使用assets目录下存放的资源文件,assets目录下存放的资源代表应用无法直接访问的原生资源,应用程序通过AssetManager以二进制流的形式来读取资源。本课时介绍assets资源的使用方法。
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。本课时介绍SharedPreferences存储的使用方法。
内部存储,就是将文件保存在设备内部存储器中,默认情况下,这些文件是相应程序私有的,对其他程序不透明,对用户也是不透明的,当程序卸载后,这些文件就会被删除。本课时主要介绍一般内部存储的使用方法。
所有Android设备都支持可以保存文件的共享外部存储器,这个外部存储器可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动)。本课时介绍一般外部存储的使用方法。
SQLite是一种关系型数据库,并且SQLite是轻量级的数据库解决方案,SQLite支持多数的SQL92标准,在一些场合下其性能优于MySql等数据库引擎。本课时介绍SQLite存储的使用方法。
SQLite是一种关系型数据库,并且SQLite是轻量级的数据库解决方案,SQLite支持多数的SQL92标准,在一些场合下其性能优于MySql等数据库引擎。本课时介绍SQLite存储的使用方法。
ContentProvider提供了在应用程序之前共享数据的一种机制,而每一个应用程序都是运行在不同的应用程序的,数据和文件在不同应用程序之间达到数据的共享不是没有可能,而是显得比较复杂,而正好Android中的ContentProvider则达到了这一需求,比如有时候我们需要操作手机里的联系人,手机里的多媒体等一些信息,我们都可以用到这个ContentProvider来达到所需。本课时介绍ContentProvider存储的使用方法。
通过调用Android的API,可以实现相册,播放器,录音和摄像等功能。本课时介绍多媒体的多种支持格式。
开发Android软件中可能经常需播放多媒体声音文件,一般使用MediaPlayer类,但该类占用资源较多,对于游戏等应用可能不是很适合,SoundPool类在SDK的android.media.SoundPool为声音池的意思。本课时介绍SoundPool的使用方法。
MediaPlayer播放音频比较简单,但要播放视频就需要SurfaceView,SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。本课时介绍MediaPlayer播放音频的使用方法。
使用VideoView播放视频简单、方便,除此之外,还可以利用MediaPlayer用来播放视频。本课时介绍MediaPlayer播放视频的使用方法。
VideoView是Android系统提供的一个媒体播放显示和控制的控件。本课时介绍VideoView播放视频的使用方法。
Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Intent和MediaStroe调用系统Camera App程序来实现拍照和摄像功能,二是根据Camera API自写Camera程序。本课时主要介绍Camera的使用方法。
由于对手机娱乐功能方面的需要,在Android系统中都是自带系统照相机程序的,直接调用系统的照相机程序是最便捷实现照相机功能的方式。本课时主要介绍系统拍照功能的使用方法。
在进行多媒体播放时,我们知道使用MediaPlayer类来进行处理,而对于多媒体的采样录制,在Android中使用了MediaRecorder类来进行处理。本课时主要介绍MediaRecorder录音的使用方法。
当一个Android项目开发完成后,需要打包和签名处理,这样才能放到手机中使用,当然也可以发布到Google Play上去让大家下载、让自己赚钱。本课时主要介绍应用程序打包发布的使用方法。
项目开发流程是做一个项目的开始,至关重要,它关系到整个项目的需求、设计、开发、测试和产品发布等等因素。本课时主要介绍项目开发的基本流程。
在Android应用中创建界面通常有两种方法,一种是使用xml创建布局,另一种则是在java代码中实现,与使用xml文件相比,它更加灵活、更加动态。本课时主要介绍界面的基本设计方法。
SQLite是一种流行的关系型数据库管理系统(Relational Database Management System, RDBMS),它具有以下特征:开源、符合标准、轻量级、单一层等。本课时主要介绍SQLite的使用方法。
本课时主要介绍记事本实例之呈现日志代码实现。
本课时主要介绍记事本实例之编辑添加日志代码实现。
本课时主要介绍记事本实例之添加日志附加媒体代码实现。
本课时主要介绍记事本实例之播放日志附加媒体代码实现。
本课时介绍什么是超级手电筒,有哪些功能,以及为后面的开发做一些准备工作。
本课时介绍超级手电筒的程序架构以及热点区域的布局。
本课时通过实例讲解闪光灯的控制方法和drawable资源。
本课时通过实例讲解超级手电筒的主界面布局和UI切换。
本课时学习多线程的使用,通过实例学会设置和获取屏幕亮度。
本课时讲解摩尔斯电码的理论,通过实例学会如何用闪光灯发送摩尔斯电码。
本课时通过实例讲解渐变drawable资源的用法和自定义控件的实现和使用。
本课时通过实例讲解搭建彩色灯的UI,根据彩色灯颜色设置自定义控件的文本颜色。
本课时通过实例讲解搭建彩色灯的UI,根据彩色灯颜色设置自定义控件的文本颜色。
本课时通过实例讲解搭建警灯的UI、控制警灯、实现窗口按两下退出。
本课时通过实例讲解搭建设置的UI、动态调整警示灯和警灯的闪烁频率及添加和删除快捷方式。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [Android用户界面之常用控件Spinner]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [Android用户界面之常用控件Spinner]}

我要回帖

更多关于 免登录steam破解补丁 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信