日期选择器
通过DatePicker设置显示位置
java代码获取和显示
datePicker=(DatePicker)findViewById(R.id.date);
Calendar calendar=Calendar.getInstance();
year=calendar.get(Calendar.YEAR);//获取年月日
month=calendar.get(Calendar.MONTH);
day=calendar.get(Calendar.DAY_OF_MONTH);
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
MainActivity.this.year=year;//赋予年月日
MainActivity.this.month=monthOfYear;
MainActivity.this.day=dayOfMonth;
String str=year+"年"+(month+1)+"月"+day+"日";
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
}
});
<DatePicker
android:id="@+id/date"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</DatePicker>
时间选择器
TimePicker timePicker=(TimePicker)findViewById(R.id.time);
timePicker.setIs24HourView(true);//设置24小时显示
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
String str=hourOfDay+"时"+minute+"分";
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
}
});
<TimePicker
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TimePicker>
计时器
<Chronometer
android:id="@+id/com"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format="已有时间:%s"
android:textColor="#DF365E"
android:layout_marginRight="20dp"
android:layout_marginLeft="90dp"
/>
<!--继承至文本框,所以文本框能用的也能用
android:format="已有时间:%s"设置显示时间格式
-->
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//设置当前页面全屏显示
ch=(Chronometer) findViewById(R.id.com);
ch.setBase(SystemClock.elapsedRealtime());//设置启始时间,SystemClock.elapsedRealtime()获取当前的系统时间
ch.setFormat("%s");//设置时间格式
ch.start();//开启计时器
//添加的监听器
ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
if (SystemClock.elapsedRealtime()-ch.getBase()>=60000){//判断计时是否到六十秒{
ch.stop();
}
}
});
高级UI组件
-
进度条组件
1. 进度条
<!--
不添加默认圆形进度条
添加其他使用style
android:max="100"设置最大值
android:progress="50"设置当前值
如果需要获取进度需要创建线程
判断是否完成,否就调用setProgress()方法更新进度
是就调用setVisibility()方法设置进度条不显示
-->
<ProgressBar
style="?android:progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50"
/>
private ProgressBar progressBar;//定义进度条对象
private int mProngress=0;//用于记录完成进度的
private Handler mhandler;//用于处理消息的
//设置全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//获取对象
progressBar=(ProgressBar) findViewById(R.id.pb);
//因为在安卓中不支持在主线程更新UI组件,所以需要通过Handler发送消息更新UI组件
mhandler=new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {//消息处理方法
if(msg.what == 0x111){//判断耗时操作是否完成
progressBar.setProgress(mProngress);//设置进度条更新
}else{
Toast.makeText(MainActivity.this,"已完成",Toast.LENGTH_SHORT).show();//完成后弹出已完成
progressBar.setVisibility(View.GONE);//设置进度条不显示
}
}
};
new Thread(new Runnable(){//创建线程模拟耗时操作
@Override
public void run() {//重写run方法
while (true){//用来实时获取耗时操作
mProngress=doWork();//获取当前进度等于耗时操作
Message m=new Message();//实例化消息对象,用于更新进度条完成的进度
if(mProngress<100){//判断进度是否完成
m.what=0x111;//设置消息代码,0x111自定义的消息代码,用于区分消息
mhandler.sendMessage(m);//发送消息
}else{//进度条完成的时候
m.what=0x110;
mhandler.sendMessage(m);
break;//
}
}
}
private int doWork(){//模拟耗时操作
mProngress+=Math.random()*10;//获取随机数
try {//try异常,因为 Thread.sleep会报异常
Thread.sleep(200);//等待200毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
return mProngress;//返回进度
}
}).start();//启动线程
<ProgressBar
android:id="@+id/pb"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
/>
2. 托动条
SeekBar seekBar=(SeekBar)findViewById(R.id.sb);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override//进度改变的时候执行的方法,拖动,int progress当前进度
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Toast.makeText(MainActivity.this,"哈哈哈哈"+progress,Toast.LENGTH_SHORT).show();
}
@Override//触摸的时候执行的方法,点一下
public void onStartTrackingTouch(SeekBar seekBar) {
Toast.makeText(MainActivity.this,"触摸",Toast.LENGTH_SHORT).show();
}
@Override//停止触摸的时候触发的方法,点完后,拖动完后
public void onStopTrackingTouch(SeekBar seekBar) {
Toast.makeText(MainActivity.this,"停止",Toast.LENGTH_SHORT).show();
}
});
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="10"
android:progress="5"
/>
<!--android:max="10"最大的进度
android:progress="5"当前进度
android:thumb=""设置小圆点为其他图片-->
3. 星级评分条
<RatingBar
android:id="@+id/rb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="6"
android:rating="3"
/>
<!--android:numStars="10"设置有多少星星
android:rating="2"默认点亮的星星
android:stepSize="1"设置一整颗的选择,不能选择半颗,默认是0.5
android:isIndicator="false"设置能否改变星星-->
ratingBar=(RatingBar) findViewById(R.id.rb);
Button b=(Button)findViewById(R.id.b);
b.setOnClickListener(new View.OnClickListener() {//事件监听器
@Override
public void onClick(View v) {
float rating=ratingBar.getRating();//获取有多少星星
Toast.makeText(MainActivity.this,"你点击了"+rating+"星",Toast.LENGTH_SHORT).show();
}
});
- 图像类组件
- 图像视图
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/bgstart"
/>
<ImageView
android:layout_width="170dp"
android:layout_height="170dp"
android:src="@drawable/qwer"
android:scaleType=""//通过这个可以修改图片的缩放方式
//fitXY,x轴和y轴独立缩放;centen放在ImageView中间,不进行任何缩放;
//centenGrop保持纵横比缩放图片,遗失的的图片完全覆盖ImageVIew;fitCenten保持纵横比缩放图片,缩放后图片位于ImageView中央
//fitEnd位于ImageView的底部,fitStart位于ImageView的顶部;matrix以矩阵的方式对图片进行缩放
android:adjustViewBounds="true"//指定是否调整自己的边界来保持所显示图片的长宽比的;这样就可以设置图片的最大宽度和最大高度了
android:maxWidth="90dp"//最大宽度;layout_width需要设置为wrap_content
android:maxHeight="90dp"//最大高度;laout_height需要设置为wrap_content
android:tint="#aaFF0000"//设置着色属性,#aaFF0000为半透明红色
/>
2. 图像切换器
左右滑动切换图片,还有动画效果
ImageSwitcher is=(ImageSwitcher)findViewById(R.id.imageSwit);//获取ImageSwitcher
is.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_out));//android.R.anim.fade_out淡出动画
is.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_in));//android.R.anim.fade_in淡入动画
is.setFactory(new ViewSwitcher.ViewFactory() {//指定视图工厂
@Override
public View makeView() {
ImageView imageView=new ImageView(MainActivity.this);//为图像切换器指定图像
imageView.setImageResource(R.drawable.qwer);//指定默认加载图片
return imageView;
}
});
is.setOnClickListener(new View.OnClickListener() {//事件监听器
@Override
public void onClick(View v) {
((ImageSwitcher)v).setImageResource(R.drawable.asds);
}
});
<ImageSwitcher
android:id="@+id/imageSwit"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ImageSwitcher>
private int[] arrayPicture=new int[] {R.drawable.ima,R.drawable.imag,R.drawable.image,
R.drawable.imagev,R.drawable.imagevi,R.drawable.qazxsw,R.drawable.qwer};//保存显示图像id的数组
private ImageSwitcher imageSwitcher;
private int index;//用于获取图像
private float touchDownx;
private float touchUpx;//记录手指按下和抬起的时候x轴的坐标
onCreate中写
//设置全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwit);
imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {//设置视图工厂
@Override
public View makeView() {
ImageView imageView=new ImageView(MainActivity.this);//用于显示图片
imageView.setImageResource(arrayPicture[index]);//指定一个要显示默认图片
return imageView;
}
});
imageSwitcher.setOnTouchListener(new View.OnTouchListener() {//触摸事件监听器
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){//判断是否按下
touchDownx=event.getX();//把按下的x轴位置给touchDownx
return true;
}else
if(event.getAction()==MotionEvent.ACTION_UP){//判断是否抬起
touchUpx=event.getX();//把按下的x轴位置给touchUpx
if (touchUpx-touchDownx>100){//判断是否手指是否是从左往右滑
index=index==0?arrayPicture.length-1:index-1;//设置当前图片的索引
//设置滑动时候的动画
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.slide_in_left));//淡入动画
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.slide_out_right));//淡出动画
imageSwitcher.setImageResource(arrayPicture[index]);//设置要显示的图片
}else if(touchDownx-touchUpx>100){//判断是否手指是否是从右往左滑
index=index==arrayPicture.length-1?0:index+1;//设置当前图片的索引
//设置滑动时候的动画
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.slide_in_right));//淡入动画
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.slide_out_right));//淡出动画
imageSwitcher.setImageResource(arrayPicture[index]);//设置要显示的图片
}
return true;
}
return false;
}
});
3.网格视图
用行列来显示图片
GridView gridView=(GridView)findViewById(R.id.group_view);
gridView.setAdapter(new ImageAdapter(this));//设置适配器
public class ImageAdapter extends BaseAdapter{//创建一个类继承BaseAdapter
private Context mcontext;
public ImageAdapter(Context mcontext){
this.mcontext=mcontext;
}
@Override
public int getCount() {
return picture.length;//返回图片数组长度
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//创建一个新的ImageView,用来显示图片的,并且将图片通过适配器,加载到新的ImageView中
ImageView imageView;
if(convertView==null){
imageView=new ImageView(mcontext);//创建imageView组件
imageView.setLayoutParams(new GridView.LayoutParams(250,200));//设置宽和高
//设置图片的缩放方式,ImageView.ScaleType.CENTER_CROP保持纵横比进行缩放,并且完全覆盖ImageView
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
}else {
imageView=(ImageView) convertView;//强转
}//将获取到的图片放到ImageView中
imageView.setImageResource(picture[position]);
return imageView;
}
}
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2016年1月19号"
android:paddingBottom="10dp"
android:paddingTop="10dp"
/>
<GridView
android:id="@+id/group_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:gravity="center"
android:verticalSpacing="5dp"
android:columnWidth="100dp"
>
<!--android:numColumns="auto_fit"
设置为自动排列
android:verticalSpacing="5dp"
垂直间距
android:columnWidth="100dp"
列宽度
-->
</GridView>
4.下拉列表框
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/ctype">//需要自己创建资源导入,或者可以通过适配器
</Spinner>
private int[] picture=new int[]{R.drawable.ima,R.drawable.imag,R.drawable.image,R.drawable.imagev,
R.drawable.imagevi,R.drawable.qwer,R.drawable.qazxsw,R.drawable.asds};
String[] ctype=new String[]{"全部","电视","电影","图片","动画片","游戏"};
ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,ctype);
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner=(Spinner)findViewById(R.id.spinner);
spinner.setAdapter(arrayAdapter);
String s=spinner.getSelectedItem().toString();
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
实时获取选择的
spinner=(Spinner)findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String result=parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
- 列表类组件
1. 列表视图
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/ctype"
>
</ListView>
<!-- android:entries="@array/ctype"-->
<!--因为具有图片和文字所以需要另外添加布局管理器
-->
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:maxWidth="72dp"
android:maxHeight="72dp"
android:adjustViewBounds="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_gravity="center"
android:id="@+id/title"/>
//添加列表项的文字
String[] title=new String[]{"刘一","陈2","张三","李四","王五","赵柳","赵7","赵8"};
//创建List对象
List<Map<String,Object>> listtitem=new ArrayList<Map<String,Object>>();//
for (int i=0;i<imageID.length;i++){
//通过for循环把图片id和文字添加到map里面
Map<String,Object> map=new HashMap<String, Object>();
map.put("image",imageID[i]);
map.put("name",title[i]);
listtitem.add(map);
}
//
SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,
listtitem,R.layout.mainlayout,//创建的布局适配器
new String[]{"name","image"},new int[]{R.id.title,R.id.image});
ListView listView=(ListView)findViewById(R.id.lv);//获取ListView
listView.setAdapter(adapter);//将适配器和listView关联
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//添加监听器
Map<String,Object> map=(Map<String,Object>)parent.getItemAtPosition(position);
Toast.makeText(MainActivity.this,map.get("name").toString(), Toast.LENGTH_SHORT).show();
//this,map.get("name").toString()获取名称
}
});
2滚动视图
可以在xml布局文件中添加ScrollView设置滚动视图,也可以通过java代码添加
<!--HorizontalScrollView是水平滚动条
ScrollView是垂直滚动条
在一个滚动视图当中只能放一个组件
如果想要使用多个需要使用布局管理器把组件括起来
-->
LinearLayout linearLayout1=(LinearLayout)findViewById(R.id.linearLaoyut);//获取LinearLayout
LinearLayout linearLayout2=new LinearLayout(MainActivity.this);//在创建一个LinearLayout
linearLayout2.setOrientation(LinearLayout.VERTICAL);//设置成为垂直的
ScrollView scrollView=new ScrollView(MainActivity.this);//创建滚动视图对象
linearLayout1.addView(scrollView);//添加到获取的LinearLayout中
//将创建的scrollView添加到创建的LinearLayout中
scrollView.addView(linearLayout2);
//为linearLayout2添加图像视图和文本框组件
//创建一个图像视图,并设置图片
ImageView imageView=new ImageView(MainActivity.this);
imageView.setImageResource(R.drawable.qwer);
//将图像视图添加到linearLayout2
linearLayout2.addView(imageView);
//创建文本框组件
TextView textView=new TextView(MainActivity.this);
textView.setText(R.string.content);//将文字添加到文本框组件z中
//将文本框组件添加到linearLayout2中
linearLayout2.addView(textView);
- 选项卡组件
TabHost tabHost=(TabHost) findViewById(android.R.id.tabhost);
tabHost.setup();//初始化
//添加标签页
//声明并实例化一个Laoutinflater对象
LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
//通过inflater来加载标签页
inflater.inflate(R.layout.tab1,tabHost.getTabContentView());
inflater.inflate(R.layout.tab2,tabHost.getTabContentView());
//添加标签页
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1").setContent(R.id.left));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2").setContent(R.id.right));