Android View之用户界面...
PS:Android的控件真的是很多...现在还在忙到控件...也是神了....
学习内容:
1.Spinner下拉菜单...
2.AutoComplete TextView自动完成文本框...
1.Spinner下拉菜单....
下拉菜单,这个是非常熟悉的...这个大部分应用基本是有的...比较常用,相对而言,挺简单的,就是有些地方不那么容易理解而已...Spinner这个东西需要使用到适配器...那什么是适配器呢?到底是干什么用的呢?就是将我们保存的数据更好的显示在View上...这就是适配器的基本作用...这样说有可能有点抽象...上个代码....这里我们先在xml文件中定义一个类似于数组的一个东西来保存数据...这里的数据信息就代表下拉菜单将要显示的数据...
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">下拉菜单...</string>
<string name="action_settings">...</string>
<string name="color">选择颜色:</string>
<string-array name="colors">
<item>red</item>
<item>blue</item>
<item>green</item>
<item>white</item>
</string-array>
</resources>
布局文件基本没什么东西,直接在布局的文件中加入一个下拉菜单控件就行了...
<TextView
android:id="@+id/color"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/color"/>
<Spinner
android:id="@+id/spinner"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:prompt="@string/color"/>
<!--prompt表示的是在初始情况下显示的文本...-->
这里最主要的还是java文件...这个java文件给我的感觉才是最坑人的...有一些东西很不容易理解...比如说ArrayAdapter这是个数组适配器,这个数组适配器的目的就是为了保存我们的数据资源..
package com.example.andorid_radio; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
Spinner sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp=(Spinner)findViewById(R.id.spinner);
//创建一个数组适配器...这个适配器将保存实例的资源信息和id信息...以及列表显示的风格... /* public static ArrayAdapter<CharSequence> 字符集合 createFromResource(Context context,
* int textArrayResId, int textViewResId) { 传递的是当前这个资源文件的TextView中的id信息并读取资源文件里的数据生成适配器...
* CharSequence[] strings = context.getResources().getTextArray(textArrayResId);//获取数据源在数组内的标识符..说白了就是string.xml文件里的数据...
* return new ArrayAdapter<CharSequence>(context, textViewResId, strings);//返回一个字符集类型的适配器..textViewResId表示的是布局文件里控件的id信息..
* }
* 上面这个东西是createFromResource的源码..内容很清楚...
* 下面函数的三个参数this表示当前Activity,R.array.colors表示的是string.xml文件里的string-array...
* android.R.id.layout.simple_spinner_item..表示布局文件里的下拉列表...
* */ ArrayAdapter adapter=ArrayAdapter.createFromResource(this, R.array.colors, android.R.layout.simple_spinner_item);
//设置下拉时的效果...这里为系统默认的效果...
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//设置下拉列表选项里的内容信息为数组适配器内的数据信息...
sp.setAdapter(adapter);
//定义子元素选择监听器...
OnItemSelectedListener oisl=new OnItemSelectedListener() { @Override
/*这里解释一下这几个参数的含义...AdapterView<?> arg0这个表示的是下拉列表被选择..View arg1...表示哪个子元素被选择..
* arg2表示适配器内哪一个view被选择的定位... arg3表示哪一行被选择...
* arg0.getItemAtPosition(arg2).toString()表示下拉列表内的选项被选择的信息...被转化成字符串的形式显示出来...
* */
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
//用一个信息提示框来显示触发的信息...
Toast.makeText(MainActivity.this, arg0.getItemAtPosition(arg2).toString(), Toast.LENGTH_SHORT).show();
} @Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
};
//
sp.setOnItemSelectedListener(oisl);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
2.AutoCompleteTextView自动完成文本框...
自动完成文本框与适配器捆绑在一起,这个控件的基本作用就是当我们在输入信息的时候,系统会根据适配器里的内容进行自动匹配显示...这个空间也是非常常用的...我们来看看它的作用...
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">下拉菜单...</string>
<string name="action_settings">...</string>
<string-array name="province">
<item>shan dong</item>
<item>jiang su</item>
<item>an hui</item>
<item>zhe jiang</item>
<item>fu jian</item>
<item>shang hai</item>
<item>guang dong</item>
<item>guang xi</item>
<item>hai nan</item>
<item>hu bei</item>
<item>hu nan</item>
<item>he nan</item>
<item>jiang xi</item>
<item>bei jing</item>
<item>tian jin</item>
<item>he bei</item>
<item>shan xi</item>
<item>nei meng gu</item>
<item>ning xia</item>
<item>xin jiang</item>
<item>qing hai</item>
<item>shan xi</item>
<item>gan su</item>
<item>si chuan</item>
<item>yun nan</item>
<item>gui zhou</item>
<item>xi zang</item>
<item>chong qing</item>
<item>liao ning</item>
<item>ji lin</item>
<item>hei long jiang</item>
<item>tai wan</item>
<item>xiang guang</item>
<item>ao men </item>
<item>山东</item>
<item>江苏</item>
<item>安徽</item>
<item>浙江</item>
<item>福建</item>
<item>上海</item>
<item>广东</item>
<item>广西</item>
<item>海南</item>
<item>湖北</item>
<item>湖南</item>
<item>河南</item>
<item>江西</item>
<item>北京</item>
<item>天津</item>
<item>河北</item>
<item>山西</item>
<item>内蒙古</item>
<item>宁夏</item>
<item>新疆</item>
<item>青海</item>
<item>陕西</item>
<item>甘肃</item>
<item>四川</item>
<item>云南</item>
<item>贵州</item>
<item>西藏</item>
<item>重庆</item>
<item>辽宁</item>
<item>吉林</item>
<item>黑龙江</item>
<item>台湾</item>
<item>香港</item>
<item>澳门</item>
</string-array>
</resources>
这个xml文件大家一看就懂,就是弄了一个string数组,里面来保存我们的数据信息...然后就是布局文件...
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="省份"/>
<!--这里completionThreshold="1"这句话表示的是我们输入几个字符时才给出提示,我这个就是输入一个字符就会给出提示...-->
<AutoCompleteTextView
android:id="@+id/AutoCompleteTextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入省份..."
android:completionThreshold="1">
</AutoCompleteTextView>
</RelativeLayout>
很简单的布局文件...因为不是什么成品的东西,所以涉及的东西就很少...前面已经说过AutoCompleteTextView是与适配器进行绑定的一个控件...因此必然少不了适配器的存在..接着我们看看java文件...
package com.example.andorid_radio; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String [] province=getResources().getStringArray(R.array.province);//目的是获取string.xml文件里的数据信息... //然后将我们获取的数据信息放入到新建的数组适配器当中...
ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,province); AutoCompleteTextView acv=(AutoCompleteTextView)findViewById(R.id.AutoCompleteTextView01); //将acv与适配器进行绑定...
acv.setAdapter(adapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
3.DatePicker控件...
日期选择控件,其实就是一个修改日期时间的一个控件...这里放入一个文本显示控件用来显示信息,另一个按钮用来进行触发,当按钮被触发的时候会显示一个新的窗口来修改日期时间信息...
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/TextView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请设置日期"/>
<Button
android:id="@+id/Button01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置日期和时间"/>
</RelativeLayout>
然后就是java文件...
package com.example.andorid_radio; import java.util.Calendar; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.DatePicker;
import android.widget.Button;
import android.widget.TextView;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.view.View.OnClickListener;
import android.app.Dialog;
public class MainActivity extends Activity {
private int myear,mmonth,mday;
Button btn_1;
TextView dateDisplay;
static final int Date_Dialog_Id=0;
//当日期被设置的时候触发监听器...
private OnDateSetListener osl=new DatePickerDialog.OnDateSetListener(){ @Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
myear=year;
mmonth=monthOfYear;
mday=dayOfMonth;
dateDisplay.setText(myear+"-"+mmonth+"-"+mday);
} };
//重写方法...创建一个新的窗口然后返回...
@Override
protected Dialog onCreateDialog(int id){
switch(id){
case Date_Dialog_Id:{
//这里必须要传递这五个参数...
return new DatePickerDialog(this,osl,myear,mmonth,mday);
}
}
return null; }
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); final Calendar c=Calendar.getInstance();
myear=c.get(Calendar.YEAR);
mmonth=c.get(Calendar.MONTH);
mday=c.get(Calendar.DAY_OF_MONTH);
//按钮点击时被触发...
OnClickListener osl=new Button.OnClickListener(){ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//重写其内部的方法来显示窗口...
showDialog(Date_Dialog_Id);
} }; dateDisplay=(TextView)findViewById(R.id.TextView01);
btn_1=(Button)findViewById(R.id.Button01);
btn_1.setOnClickListener(osl); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
PS:在日出之前奔跑,在夕阳之下辉煌...
Android View之用户界面...的更多相关文章
- Android View和ViewGroup
View和ViewGroup Android的UI界面都是由View和ViewGroup及其派生类组合而成的. 其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也 ...
- android.view.View
* This class represents the basic building block for user interface components. A View * occupies a ...
- 虾扯蛋:Android View动画 Animation不完全解析
本文结合一些周知的概念和源码片段,对View动画的工作原理进行挖掘和分析.以下不是对源码一丝不苟的分析过程,只是以搞清楚Animation的执行过程.如何被周期性调用为目标粗略分析下相关方法的执行细节 ...
- Android View.setId(int id) 用法
Android View.setId(int id) 用法 当要在代码中动态的添加View并且为其设置id时,如果直接用一个int值时,Studio会警告. 经过查询,动态设置id的方法有两种; 1. ...
- android view 中各函数的执行顺数
这个就好像是 activity 的生命周期一样,如果我们要使用自定义的 view,那么就很有必要了解一下 view 的那些能够被重写的函数的执行顺序.废话不多讲,以常用的5个函数为例子,见下文: pa ...
- Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误
这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面. 当时,我仔细检查了一下自己的代码,并 ...
- Android View 事件分发机制 源码解析 (上)
一直想写事件分发机制的文章,不管咋样,也得自己研究下事件分发的源码,写出心得~ 首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个My ...
- 简单研究Android View绘制三 布局过程
2015-07-28 17:29:19 这一篇主要看看布局过程 一.布局过程肯定要不可避免的涉及到layout()和onLayout()方法,这两个方法都是定义在View.java中,源码如下: /* ...
- java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ProgressBar$SavedState
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.Progress ...
随机推荐
- fine-uploader 5.11.8 (最新版) 使用感受
以前测试和使用过 3.X 因为够用,所以一直没升级,今天闲来无聊测试了一下最新版.和3.X比性能上好了很多,但不支持了移动设备的多文件上传. 关于3.X版 可以看这里:http://www.cnblo ...
- Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- 根据第三方提供的wsdl报文(axis2开发),进行的webservice应用的开发实例
接口应用名称:NgCallService 入参和出参信息 入参和出参报文信息 入参: <?xml version="1.0" encoding="UTF-8&quo ...
- jquery.pjax.js bug问题解决集锦
jquery.pjax 是一个很好的局部刷新插件,但实际应用过程是还是会有很多小问题,部分问题解决如下: 1.pjax 局部加载时候,IE 存在缓存问题,很容易理解,pjax是通过jquery的aja ...
- ch2 MySQL 架构组成
第 2 章 MySQL 架构组成 前言 麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从 MySQL 物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL ...
- [原创]android使用代码生成LayerDrawable的方法和注意事项
为了有更好的UI体验,一般我们会把button.textview等控件的背景设置上阴影.传统的做法是美工提供一张具有阴影效果的nine patch图,然后将其在xml文件中添加到background属 ...
- Swift 正式开源, 包括 Swift 核心库和包管理器
Swift 正式开源!Swift 团队很高兴宣布 Swift 开始开源新篇章.自从苹果发布 Swfit 编程语言,就成为了历史上发展最快的编程语言之一.Swift 通过设计使得软件编写更加快速更加安全 ...
- 基本的文件 I/O
基本的文件 I/O MSDN 抽象基类 Stream 支持读取和写入字节.Stream 集成了异步支持.其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然. 所有表示流的类都是从 Strea ...
- android自定义view仿照MIUI中音量控制效果
先看效果图: 这就是miui中的音量效果图,实现思路是自定义视图,绘制圆环,然后设置进度显示. 核心代码在onDraw中实现如下: @Override protected void onDraw(Ca ...
- Android之线程回掉更新ui
一:工作线程中的回掉更新UI public class MainActivity extends AppCompatActivity { private int i; private Callback ...