Android从入门到进阶之高级控件
高级控件
1.自动完成文本控件
在搜索引擎(百度、搜狗)输入几个文字,会出来一些提示。可以减少用户的输入,提高程序的效率。刚才看到的自动提示,ajax技术。
1.1AotoCompleteTextView
取消下拉:Esc或BackSpace键
步骤:
1.定义一个字符串数组(有后台了,从后台读取),用于保存自动提示的数据。
2.将此字符串数组放入到数组适配器(ArrayAdapter)。
3.利用AutoCompleteTextView的setAdapter()方法,将字符串数组加入到AutoCompleteTextView对象中,设置自动完成文本控件的适配器。
2.MutilAutoCompleteTextView
<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="自动完成文本框实例"android:textSize="20dp"/><!--加入实例--><AutoCompleteTextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/myAuto"android:hint="请输入您需要的城市"/><!--加入多行 --><MultiAutoCompleteTextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/myMulti"android:hint="请输入您需要的城市名称"/>
后台代码:
package com.aaa.zyg001;
// 这个是包的定义
//import导入相关的类;
import androidx.appcompat.app.AppCompatActivity;import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.MultiAutoCompleteTextView;
import android.widget.RadioGroup;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.ToggleButton;import org.w3c.dom.Text;import java.util.Calendar;
//直接这个类,实现一个抽象类的抽象方法
public class MainActivity extends AppCompatActivity {//1.定义字符串数组;String[]arr={"郑州","安阳","洛阳","驻马店","安庆","安溪","安阳西","安阳东"};AutoCompleteTextView myAuto;MultiAutoCompleteTextView myMulti;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取内容//1.当前对象,单行项目行;填充内容ArrayAdapter<String>adapter=new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line,arr);
// System.out.println(adapter+"-------");myAuto=(AutoCompleteTextView)findViewById(R.id.myAuto);myMulti=(MultiAutoCompleteTextView)findViewById(R.id.myMulti);System.out.println(myAuto+"======");myAuto.setAdapter(adapter);//设置显示自动提示需要的字符串myAuto.setThreshold(1);//-------------------------------------------------------------myMulti.setAdapter(adapter);//用来区分不同的子串;myMulti.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());myMulti.setThreshold(1);}
}
效果图:
2.下拉列表控件
Spinner,当用户单击该控件的时候,弹出选择列表供用户选择,且只能选择一项。同网页中的Select,同C#中的Combox。
使用步骤:
1.先定义一个字符串数组,用于保存下拉列表的数据;在实际使用中,可以从数据库获取数据;
2.将此字符串数组存入数组适配器(ArrayAdapter)。
3.利用Spinner的setAdapter()方法,将适配器加入到Spinner对象中,设置自动完成文本框的适配器。
属性:
spinnerMode 设置下拉列表的模式;dialog或者dropdown
dropDownWidth getDropDownWidth()
setDropDownWidth(int pix) 设置下拉框的宽度
gravity getGravity()/setGravity() 设置选定项目的对齐方式
事件
setOnItemSelectedListener(AdapterView.OnItemSelectedListener) 当列表被选中时触发的事件
<!--设计界面 --><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/tv"android:text="请选择城市"android:textSize="20dp"/><Spinnerandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/citySp"android:spinnerMode="dropdown"/><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/tv_city"android:textSize="20dp"/>
后台代码
//1.变量和数据的声明TextView tv_city;Spinner citySp;//字符串数组String[]arr={"深圳","东莞","珠海","哈尔滨"};//获取内容tv_city=(TextView) findViewById(R.id.tv_city);citySp=(Spinner) findViewById(R.id.citySp);//适配器:和自动完成文本一致ArrayAdapter<String>adapter=new ArrayAdapter<>(this, android.R.layout.simple_spinner_item,arr);citySp.setAdapter(adapter);//下拉列表的事件citySp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position,long id) {//当我们在下拉列表上单击tv_city.setText(arr[position]);}@Overridepublic void onNothingSelected(AdapterView<?> adapterView) {}});
效果图:
3.进度条和滑块
进度条:
用于某些资源的加载、文件下载和大量数据处理等,使用进度条为用户提供明确的操作结束时间,让用户能够了解目前程序的进度及其状态。
3.1 ProgressBar
属性:
max getMax() setMax() 设置或获取进度条的上限
progress getProgress() setProgress() 设置或获取进度条的进度
<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="文件下载进度"android:textSize="20dp"/><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/fileDown"style="?android:attr/progressBarStyleHorizontal"/><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="模拟文件下载"android:id="@+id/btn_progress"/>
后台代码
public class MainActivity extends AppCompatActivity {//1.变量ProgressBar fileDown;Button btnProgress;int progress=0; //进度为0int max=102400;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//============================fileDown=(ProgressBar) findViewById(R.id.fileDown);btnProgress=(Button)findViewById(R.id.btn_progress);//设置进度条的最大值fileDown.setMax(max);//设置按钮的事件btnProgress.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//一步一步来int seed=max-progress;Random random=new Random();int current=random.nextInt(seed);progress=progress+current;fileDown.setProgress(progress);}});}
}
运行效果:
nt seed=max-progress;
Random random=new Random();
int current=random.nextInt(seed);
progress=progress+current;fileDown.setProgress(progress);}});}
}
运行效果:![在这里插入图片描述](https://img-blog.csdnimg.cn/d8593d6b74d24504b62c84d7694e1f38.png#pic_center)**4.滑块案例**SeekBar控件,用来接收用户输入的控件,类似于拖动条,可以直观的显示用户需要的数据。可以显示数值,也可以设置标度。设置音量,使用滑块。```xml<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="调节音量"android:textSize="20dp"/><SeekBarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/sk_vol"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tv_cur"/>
后台代码
public class MainActivity extends AppCompatActivity {//1.设计变量 对象SeekBar sk_vol;AudioManager myAudio; //声音管理对象;TextView tv_cur; //当前声音的提示@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//-------------------------------------------------sk_vol=(SeekBar) findViewById(R.id.sk_vol);tv_cur=(TextView)findViewById(R.id.tv_cur);//获取系统声音服务;myAudio=(AudioManager) getSystemService(Context.AUDIO_SERVICE);//音乐流声音最大值int maxVol=myAudio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//当前系统声音;int sysVol=myAudio.getStreamVolume(AudioManager.STREAM_MUSIC);//绑定到滑块sk_vol.setMax(maxVol);sk_vol.setProgress(sysVol);sk_vol.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int i, boolean b) {//当滑动的时候,不能划到负数int tempInt=seekBar.getProgress();if(tempInt<1)tempInt=1;myAudio.setStreamVolume(AudioManager.STREAM_MUSIC,tempInt,0);tv_cur.setText("当前音量:"+tempInt);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});}
}
显示效果
5.列表视图
listView是一个常用的控件,会根据屏幕大小,把具体的内容以列表的形式显示出来,例如电话本、通信记录等。
属性
choiceMode 选择模式:list没有选择模式:none;singleChoice 一项选中;multipleChoice:多项选中。
divider: 项目之间用某个图形或颜色来分割。
dividerHeight 分割符的高度。
方法
setOnItemClickLister(AdapterView.OnItemClickListener) 列表项被单击时触发的事件
setOnItemSelectedListener(AdapterView.OnItemSelectedListener) 当列表项改变时被触发的事件
getCheckedItemIds() 返回检查项目标识的集合
4个xml界面文件
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="列表视图案例"android:textSize="20dp"/><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/btn_arr"android:text="使用ArrayAdapter为ListView绑定数据"/><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/btn_simple"android:text="使用SimpleAdapter为ListView绑定数据"/>
</LinearLayout>
2.arrayadapter.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"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="这是一个ArrayAdapter的案例"android:textSize="20dp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tv_content"/><!-- arrayList,分割颜色;#5555555,行高5px--><ListViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/arrayList"android:divider="#555555"android:dividerHeight="5px"/>
</LinearLayout>
3.simpleadapter.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">
<!-- 设计界面--><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="热歌排行榜"android:textSize="20dp"/><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:text="歌曲"android:layout_weight="1"/><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:text="歌手"android:layout_weight="1"/><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:text="时长"android:layout_weight="1"/></LinearLayout><ListViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:divider="#555555"android:dividerHeight="1dp"android:id="@+id/simpleAdapter"/>
</LinearLayout>
4.list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><!-- 设计界面 --><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:id="@+id/song_name"/><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:id="@+id/singer"/><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:id="@+id/album"/>
<!-- 横向线性布局,4个TextView--><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:id="@+id/duration"/>
</LinearLayout>
3个java代码
1.MainActivity.java
package com.aaa.zyg001;
// 这个是包的定义
//import导入相关的类;
import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.media.AudioManager;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.MultiAutoCompleteTextView;
import android.widget.ProgressBar;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.ToggleButton;import org.w3c.dom.Text;import java.util.Calendar;
import java.util.Random;//直接这个类,实现一个抽象类的抽象方法
public class MainActivity extends AppCompatActivity {Button btn_ArrayAdapter;Button btn_SimpleAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//======数组适配器初始化;参数:this当前对象;1行;数组内容//获取变量对应的控件btn_ArrayAdapter=(Button)findViewById(R.id.btn_arr);btn_SimpleAdapter=(Button)findViewById(R.id.btn_simple);//下面是监听事件btn_ArrayAdapter.setOnClickListener(new View.OnClickListener(){/*** 需要用到后面的技术点;* @param view*/@Overridepublic void onClick(View view) {Intent intent=new Intent();//需要增加该类intent.setClass(MainActivity.this,ArrayAdapterActivity.class);//启动;startActivity(intent);}});btn_SimpleAdapter.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View view) {Intent intent=new Intent();//需要增加该类intent.setClass(MainActivity.this,SimpleAdapterActivity.class);//启动;startActivity(intent);}});}
}
2.ArrayAdapterActivity.java
package com.aaa.zyg001;import android.app.Activity;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;public class ArrayAdapterActivity extends AppCompatActivity {/* 定义我们需要的类的对象*/ListView listView;ArrayAdapter<String>adapter;TextView tv_Content;//复制也行,不复制也可以;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//猜测是加载某个xml文件,设置界面视图setContentView(R.layout.arrayadapter);//----------------------------------------listView=(ListView) findViewById(R.id.arrayList);//星期数组final String[] weekList={"周一","周二","周三","周四","周五","周六","周日"};adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,weekList);listView.setAdapter(adapter);//设置监听事件;listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {tv_Content=(TextView) findViewById(R.id.tv_content);tv_Content.setText("您的选择是:"+weekList[position]);}});}
}
3.SimpleAdapterActivity.java
package com.aaa.zyg001;import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;import androidx.annotation.Nullable;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class SimpleAdapterActivity extends Activity {//1.声明变量String[]songs=new String[]{"国歌","歌唱祖国","夏天的风","无人之岛"};String[]singer=new String[]{"聂耳","无","Uu","任然"};String[]albums=new String[]{"国歌","歌唱祖国","夏天的风","无人之岛"};String[]duratioins=new String[]{"3:56","3:17","4:45","4:37"};ListView listView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simpleadapter);//获取布局xml//listView=(ListView) findViewById(R.id.simpleAdapter);//泛型+Map集合List<Map<String,Object>> listItem=new ArrayList<Map<String,Object>>();for(int i=0;i<songs.length;i++){Map<String,Object>item=new HashMap<String,Object>();item.put("song",songs[i]);item.put("singer",singer[i]);item.put("album",albums[i]);item.put("duration",duratioins[i]);listItem.add(item);}SimpleAdapter myAdapter=new SimpleAdapter(getApplicationContext(),listItem,R.layout.list,new String[]{"song","singer","album","duration"},new int[]{R.id.song_name,R.id.singer,R.id.album,R.id.duration});//绑定listView.setAdapter(myAdapter);}
}
1个整合配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.aaa.zyg001"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Zyg001"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!--再启动其他的两个activity --><activity android:name=".ArrayAdapterActivity"></activity><activity android:name=".SimpleAdapterActivity"></activity><!--定义结束 activity --></application></manifest>
效果图:
Android从入门到进阶之高级控件相关推荐
- 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第八章:高级控件
本章介绍了App开发常用的一些高级控件用法,主要包括:如何使用下拉框及其适配器.如何使用列表 类视图及其适配器.如何使用翻页类视图及其适配器.如何使用碎片及其适配器等.然后结合本章所学 的知识,演示了 ...
- RecyclerView高级控件-附实例【android专题】
RecyclerView高级控件 RecyclerView是Android 及其重要的一个高级UI控件,使用频率及其的高,APP的90%以上的页面都会使用的到.由于其出色的性能和插拔式的架构设计,被全 ...
- Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现...
Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...
- 《移动项目实践》实验报告——Android高级控件
实验目的 1.熟悉App开发常用的一些高级控件及相关工具,主要包括日期时间控件的用法.列表类视图及其适配器的用法.翻页类视图及其适配器的用法.碎片及其适配器的用法等: 2.熟悉四大组件之一广播Broa ...
- VR 终极选购指南:入门、进阶与高端
若你重回上世纪 90 年代读读 VR,你会发现这个词意涵颇广:从电影<天才割草人>的虚拟空间刺激系统,到电脑屏幕上的3D模型,什么都有.然而发展到今天,VR 简单明了:除某些特定情况,它等 ...
- Android高级控件----AdapterView与Adapter详解
在J2EE中提供过一种非常好的框架--MVC框架,实现原理:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上.在Android中有这样一种高级控件 ...
- Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能
Android高级控件(一)--ListView绑定CheckBox实现全选,增加和删除等功能 这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adap ...
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
Android高级控件(四)--VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷 是不是感觉QQ空间什么的每次新版本更新那炫炫的引导页就特别的激动,哈哈,其实他实现起来真的很简单很 ...
- 嗨CE系列教程全套(入门,进阶,高阶)游戏驱动反调试
嗨CE系列教程全套(入门,进阶,高阶)游戏驱动反调试等 1.入门教程5课 1.如何修改游戏 2.快速找到基址和指针 3.通过一个地址快速找到其他地址 4.制作一个简易修改器 5.一些重要的小技巧和理论 ...
最新文章
- 史上最强GAN被谷歌超越!标注数据少用90%,造假效果却更逼真
- 彻底理解cookie,session,localStorage(附代码)
- python3环境变量_配置环境变量切换到python3.7
- ant实例 jmeter_Jmeter+ant搭建环境
- Openflow协议规范
- How to show only next line after the matched one?
- Mac电脑风扇转速调节工具Macs Fan Control
- [FAQ15840]MT2503系列充电电流问题
- 一篇详细实用的IDEA插件开发指南
- Windows+WSL+DockerDesktop下安装OpenV2X
- 双目标定(三)标定流程(含矫正)
- 如何编写一个投票功能的智能合约
- linux下为php添加GD库(重新编译php)
- Win7 + VirtualBox 安装 MacOS X 10.9 Mavericks 操作步骤
- 陀螺仪重力感应(the gyroscope gravity induction)and (core Motion Framework)
- itext 5 根据模板生成PDF util类
- Windows找不到servicemsc文件怎么办?
- 计算机类对身体要求,旅游管理专业对身体条件的要求
- Debug模式 控制台调试指令
- c语言按给定成绩查询,C语言学生成绩管理系统(简易版)
热门文章
- JavaScript 使用[]读取对象属性
- idea console中文乱码_idea控制台tomcat中文乱码的处理方法
- hdu 2255二分图最大权值匹配的KM 算法
- vue_组件_非prop特性
- 【测试点分析】1072 开学寄语 (20分)_42行代码AC
- 为什么B+树比B树更适合做数据库索引
- InnoDB 的索引模型
- led大屏按实际尺寸设计画面_年会活动要用LED大屏还是投影?专业行家都是看这些数据。...
- Python爬虫 解析库的使用
- Linux启动容器端口,docker安装 创建镜像 启动容器 的 使用方法