Android简介
Android智能操作系统,主要手机,其他还有TV,穿戴设备,汽车等。
Android架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XdsLEVp-1665745053825)(C:\Users\Administrator\Documents\Tencent Files\1634866331\FileRecv\Android系统架构.png)]
APP:包含系统应用,第三方应用。使用java语言开发。
Framework:API,提供给APP层开发的各种接口,学习底层的原理和流程。使用java语言开发
LIbraries和ART:开源库,JNI的调用。C/C++实现的
**ART:**Android RunTime,dalvik—dvm
java源程序—class文件—dex文件—apk;
一个应用程序,一个进程,运行在一个独立的dvm实例中
HAL:硬件抽象层(硬件的驱动),保护硬件厂家的驱动程序不被破坏,不开源。分开软件层和硬件层进行测试
Linux内核:Android基于Linux系统的,并进行优化的。用C来实现的
APP
1、Android Studio软件
2、jre
3、adk(提供Android api)后期通过SDK马纳戈尔来下载其他版本
platforms应用支持的Android版本
Platform-tools平台工具,包含adb.exe,fastbool.exe
build-tools编译工具
extra:Platforms以外的功能,尤其用于存储兼容低版本的包
4、模拟器:
HAXM not install 原因:1没有安装HAXM installer 2、系统不支持虚拟化 可以使用第三方模拟器:逍遥模拟器,雷电模拟器,夜神模拟器
<!--
xmlns:命名空间,余数这个xm中可以使用的标签有哪些
-->
界面
通过 xml方式
<!--
颜色值:1、英文单词
2、rgb 十六进制数 #ff0000红色 #ffffff白色
#000000黑色
-->
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="你好啊"
android:textColor="#000000"
android:textSize="40dp"/>
通过代码java
public class Second extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout =new LinearLayout(this);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
layout.setLayoutParams(params);
layout.setBackgroundColor(Color.GREEN);
for (int i = 0; i < 5; i++) {
TextView tv=new TextView(this);
tv.setText("海峰智云"+i);
tv.setTextColor(Color.rgb(255,0,0));
tv.setTextSize(20);
}
setContentView(layout);
}
}
//onCreate界面创建时要执行的代码
//1、初始化组件
//2、绑定数据
//3、绑定事件
java+xml方式
固定不变的写在xml里面
可变化的写在java里面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".ThredActivity"
android:id="@+id/parentLayout"
android:orientation="horizontal">
</LinearLayout>
<!--
<androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>重叠
<LinearLayout>
</LinearLayout>链式结构,
-->
public class ThredActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
LinearLayout parentLayout=findViewById(R.id.parentLayout);
for (int i = 0; i < 5; i++) {
TextView tv=new TextView(this);
tv.setText("你好");
tv.setTextColor(Color.BLACK);
parentLayout.addView(tv);
}
}
文本视图
<!--
android:orientation="horizontal"水平的
="vertical"竖直的
文本视图
layout_width,layout_height值
match_parent填充满父控件
fill_parent 填充满父控件 已过时,不建议使用
wrap_content根据内容来填充
自定义值:100
px:像素
dp:设备独立像素 density.1dp就是160densityDpi上的1px
120dpi---0.75px
160dpi---1px
240dpi---1.5px
320dpi---2px
java 代码中使用的默认尺寸单位是px
textColor颜色值
1、存在的颜色值@android:color/holo_blue_dark
2、写出十六进制的方式表示rgb #rrggbb #rgb
#000--黑色 #fff--白色 #50aa0000-透明
3、
-->
//日志级别:verbose(任何信息都会输出) debug info warn error
Log.d("类名","String");
对齐方式
<!--
android:gravity 内容对齐方式
left right top bottom center
android:layout_gravity 该控件本身在父控件中的对齐方式
水平的LinearLayout,可以竖直居中
竖直的LinearLayout,可以水平居中
内边距
<!--
android:padding 控制和内容的间距
paddingrRight paddingLeft paddingTop
paddingBottom
外边距
<!--
android:layout_margin 外边距:该控件距父控件的间距
字体大小
<!--
textSize sp
显示
<!--
visibility gone:不显示,不占空间
invisible:不可见,占空间
visible:可见
-->
可编辑的文本框
<EditText
android:id="@+id/contentEdt"
android:layout_width=""
android:layout_height=""
android:hint=""
android:inputType=""
/>
<!--
hint 提示文字,当text不为空的时候隐藏
inputType校验输入数据的类型 number text phone date datetime textpassword
-->
按钮
<Button
android:id="@+id/registerBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"/>
图片展示
<ImageView
宽
高
android:src="图片源@drawable"
android:scaleType="">
<!-- scaleType 缩放类型
fitXY:缩放X和Y以适应控件的大小,可能会拉伸,失真
ditStart 原比例缩放图片填充控件的左上部分,右下可能留白
fiEnd 原比例缩放图片填充控件的右下部分
fitCenter 原比例缩放图片填充控件的中间
center 图片不缩放,取图片的中间显示到控件中,不拉伸,不失真,可能会裁剪
centerCrop 缩放图片至填充满控件,超出的部分裁减掉
centerInside 保持纵横比例缩小图片,以显示完整的图片
matrix 矩阵 触摸事件缩放的时候-->
<!--
android:adjustViewBounds true 允许调整ImageView大小以适应所显示的图片
-->
点9图主要用在背景上
文本监听
//editText
EditText contentEdt=findViewById(R.id.contentEdt)
//addTextChangedListener 文本变化监听器
//限制文本框输入长度6
contentEdt.addTextChangedListener(new TextWatcher() {//接口实现
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
按钮
Button registerBtn=findViewById(R.id.registerBtn);
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MuiActivity2.this,"别点了",Toast.LENGTH_LONG).show();
}
});
单选按钮
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
android:checked="true"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"
android:checked="false"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="妖"
android:checked="false"/>
</RadioGroup>
java
多选按钮
<!--
CheckBox 多选按钮
-->
<CheckBox
android:id="@+id/baskball"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="篮球"
android:checked="true"/>
<CheckBox
android:id="@+id/football"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="足球"
android:checked="true"/>
图标自定义
<!--android:button
android:drawableLeft自定义图标
android:background
-->
图片
ImageView img=new findViewById(R.id.img);
img.setImageResource(R.drawable.test)//设置src
img,setImageDrawable(getDrawable(R.drawable.text2));
Drawable drawable=new ColorDrawable(Color.GREEN);
下拉框
<Spinner
android:prompt="@string/"提示标题
anroid:layout_width=""
android:layout_hight=""
android:spinnerMode="dialog"对话框的形式
"dropdown"下拉框的形式
android:entries="@array/数组名称"/>
//position 选中项的索引
setSelsction()//设置默认选项
String[] rade=getResources().getStringArray(R.array.arage)
getSelectedItem()//获得字符串
getSelectedItemPositon()//获得索引
列表视图
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/grade"
android:divider="#00aa00"
android:dividerHeight="2dp"
android:headerDividersEnabled="true"
android:footerDividersEnabled="true"
android:listSelector=""
/>
<!--
entries="@array/grade"通过数组资源指定列表项
divider="#00aa00"分割线可颜色可图片
dividerHeight="2dp"分割线高度
headerDividersEnabled="true"顶部分割线
footerDividersEnabled="true"底部分割线
listSelector=""指定点击色
-->
java实现
ListView lv=findViewById(R.id.vivilist);
//通过适配器
String[] fru={"水蜜桃","西瓜","葡萄","樱桃"};
ArrayAdapter<String> adapt =new ArrayAdapter<>(this,android.R.layout.simple_list_item_multiple_choice,fru);
lv.setAdapter(adapt);
自定义适配器
<ImageView
android:id="@+id/imago"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_margin="10dp"
android:scaleType="fitCenter"
/>
<TextView
android:id="@+id/textTV"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="20sp"
android:gravity="center_vertical"
/>
//自定义一个水果
public class Fruit {
private int img;
private String name;
public Fruit(int img,String name) {
this.img = img;
this.name=name;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//自定义adapt
public class FruitAdapter extends BaseAdapter {
private Context context;
private List<Fruit> fruitlist;
public FruitAdapter(Context context,List<Fruit> fruitList){
this.context=context;
this.fruitlist=fruitList;
}
@Override
public int getCount() {
return fruitlist==null?0: fruitlist.size();
}
@Override
public Object getItem(int position) {
return fruitlist.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//获取视图
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
//convertView当初列表项的视图
convertView= LayoutInflater.from(context).inflate(R.layout.listview_item,null);
ImageView im=convertView.findViewById(R.id.imago);
TextView tv=convertView.findViewById(R.id.textTV);
Fruit fr=fruitlist.get(position);
im.setImageResource(fr.getImg());
tv.setText(fr.getName());
return convertView;
}
}
//最后的实现
List<Fruit> frulist=new ArrayList<>();
frulist.add(new Fruit(R.drawable.cao,"草莓"));
frulist.add(new Fruit(R.drawable.lizhi,"荔枝"));
frulist.add(new Fruit(R.drawable.ying,"樱桃"));
FruitAdapter adapt=new FruitAdapter(this,frulist);
lv.setAdapter(adapt);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuD8l27H-1665745053827)(C:\Users\Administrator\Pictures\Saved Pictures\7.14.7.PNG)]
编辑删除
public View getView(int position, View convertView, ViewGroup viewGroup) {
//convertView当初列表项的视图
hellno he=null;
if (convertView==null){
he=new hellno();
convertView= LayoutInflater.from(context).inflate(R.layout.listview_item,null);
he.im=convertView.findViewById(R.id.imago);//图片
he.tv=convertView.findViewById(R.id.textTV);//文字
he.delImg=convertView.findViewById(R.id.shanVie);//获得删除图片按钮
convertView.setTag(he);//放入数据
}else{
he=(hellno) convertView.getTag();//删除数据
}
Fruit fr=fruitlist.get(position);//获得此类
he.im.setImageResource(fr.getImg());//得到此类的图片并设置
he.tv.setText(fr.getName());//获得此类文字并设置
if(ediEut){//判断是否显示
he.delImg.setVisibility(View.VISIBLE);//显示
}else{
he.delImg.setVisibility(View.GONE);//隐藏,不显示
}
he.delImg.setOnClickListener(new View.OnClickListener() {//监听图片是否被点击
@Override
public void onClick(View view) {
fruitlist.remove(position);//点击后删除此排数据
notifyDataSetChanged();//刷新
}
});
return convertView;
}
}
class hellno{
ImageView im=null;
TextView tv=null;
ImageView delImg=null;
}
//总调度台
Button ediBut=findViewById(R.id.efiBut);//按钮
ediBut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String num=ediBut.getText().toString();
if("编辑".equals(num)){
adapt.setEdiEut(true);//设置显示效果
adapt.notifyDataSetChanged();//刷新
ediBut.setText("完成");//把编辑字体改变成为完成字体
}else{
adapt.setEdiEut(false);//设置显示效果
adapt.notifyDataSetChanged();
ediBut.setText("编辑");//把编辑字体转变成为编辑
}
}
});
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yiM6yV9q-1665745053828)(C:\Users\Administrator\Pictures\Saved Pictures\7.15.3.PNG)]
日期
<!--
android:datePickerMode选择模式:calendar日历 spinner下拉框,默认日历方式显示
android:calendarViewShown 日历是否显示,和spinner结合使用
android:maxDate 可以选择的最大日期 以mm/dd/yyyy格式
-->
<DatePicker
android:id="@+id/oneDay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:datePickerMode="spinner"
android:calendarViewShown="false"
android:maxDate=""
/>
时间选择器
<!---
android:timePickerMode选择模式 clock钟表(默认) spinner下拉框
-->
<TimePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
/>
Chronometer chro =findViewById(R.id.chron);
chro.setBase();//参考时间
chro.setCountDown();//倒计时
chro.setFormat();//格式化
chro.start();//计时开始
chro.stop();//计时结束
System.currentTimeMillis();//系统当前的时间
SystemClock.elapsedRealtime();//开机以来的毫秒值,包含锁屏的时间
chro.setOnChronometerTickListener();//计时器监听器
布局方式
线性布局
LinearLayout 线性布局
android:orientation horizontal水平 vertical垂直
android:grivity gravity 子控件的整体对齐方式
android:layout_weight 子控件在父控件的占比–可以设置在任何控件中
droid:layout_height=“wrap_content”
android:timePickerMode=“spinner”
/>
```java
Chronometer chro =findViewById(R.id.chron);
chro.setBase();//参考时间
chro.setCountDown();//倒计时
chro.setFormat();//格式化
chro.start();//计时开始
chro.stop();//计时结束
System.currentTimeMillis();//系统当前的时间
SystemClock.elapsedRealtime();//开机以来的毫秒值,包含锁屏的时间
chro.setOnChronometerTickListener();//计时器监听器
布局方式
线性布局
LinearLayout 线性布局
android:orientation horizontal水平 vertical垂直
android:grivity gravity 子控件的整体对齐方式
android:layout_weight 子控件在父控件的占比–可以设置在任何控件中