安卓笔记2日期时间选择器高级UI组件

日期选择器

通过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. 进度条组件

    		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();
            }
        });

在这里插入图片描述

  1. 图像类组件
    1. 图像视图
    <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. 列表类组件
    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);

在这里插入图片描述

  1. 选项卡组件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
        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));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值