安卓(Android)是一种基于Linux内核(不包含GNU组件)的SEO靠我自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
Android的系统架构和其操作系统一样,采用了分层的架构。分为四个层,从高层到低SEO靠我层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
Android Studio是Android运用的开发工具,由谷歌公司在2013年5月推出,是基于ISEO靠我DER演变而来的,比Eclipse更加好用
下载 Android Studio
官网地址:https://developer.android.google.cn/studio
详细安装步骤:https://SEO靠我blog.csdn.net/m0_65379736/article/details/126813964
首选打开Android Studio,然后【点击】
点击【Create device】SEO靠我
然后,点击【Phone】
选择安卓版本
根据需求选择竖屏或横屏,然后点击【Finish】
启动模拟器
出现以下界面,表明安装成功,
若没有创建成功,请重新操作此步骤,创建模拟器。若实在不行,就使用外部模拟器
下载夜神模拟器
直接下载,安装就直接下一步、下一步就可以了
连接夜神模拟器
先进入安装夜神模拟器中的bin目录
输入cmd,然后回车
然后输入在黑窗口中输入下面这行命令,回车
nox_adb.exeSEO靠我 connect 127.0.0.1:62001出现以下界面,表明连接成功
直接运行即可,前提是创建了模拟器且已打开
app开发主要有两大技术路线,分别是原生SEO靠我开发和混合开发
Android 的官方编程语言包括Java和Kotlin,但是要做Android开发必须学Java,没有Java基础是做不了的;因为这个源码是用Java写的,即使现在流行用Kotin开发SEO靠我,也要会Java才行
manifests子目录,下面有一个xml文件,即AndroidManifest.xml,是APP的运行配置文件。
java子目录,下面有3个com.exampSEO靠我le.,myapplication包,其中第一个包存放的是APP工程的java源代码,后面两个包存放的是测试用的java代码。
res子目录,存放的是APP工程的资源文件。
res子目录下面又有4个子目录SEO靠我:
drawable目录存放的是图形描述文件与用户图片
layout目录存放的是APP页面的布局文件
mipmap目录存放的是启动图标
values目录存放的是一些常量定义文件,字符串常量strings.xmSEO靠我l、像素常量dimens.xml、颜色常量colors.xml、样式风格定义styles.xml等。
Gradle Scripts工程的编译配置文件:
build.gradle,该文件分别为项目及和模块级SEO靠我两种,用于描述APP工程的编译规则。
proguard-rules.pro,该文件用于描述java文件的代码混淆规则。
gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动SEO靠我。
settings.gradle,配置哪些模块一起编译。初始内容为include“app”,表示只编译APP模块。
local.properties,项目的本地配置,一般无须改动。该文件是在工程编译时自SEO靠我动生成的,用于描述开发本机的配置,比如SDK的本地路径、NDK的本地路径等。
AndroidManifest.xml配置文件:
<?xml version="1.0" encoding="utf-8"?>SEO靠我 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.eSEO靠我xample.myapplication"> <application android:allowBackup="true" android:iconSEO靠我="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/iSEO靠我c_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApplicatiSEO靠我on"> <activity android:name=".MainActivity" android:exported="true"> SEO靠我 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category andSEO靠我roid:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> SEO靠我 </application> </manifest> AndroidManifest.xml的根节点为manifest,它的packagel属性指定了该App的包名SEO靠我。manifest下面有个application节点,它的各属
性说明如下:
android:allowBackup,是否允许应用备份。允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机SEO靠我或者数据丢失后恢复应用,用户即可通过adb backup和adb restore来进行对应用数据的格份和恢复。为true表示允许,为false则表示不允许。android:icon,指定App在手机屏SEO靠我幕上显示的图标。android:label,指定App在手机屏幕上显示的名称。android:roundIcon,指定App的圆角图标。android:supportsRtl,是否支持阿拉伯语/波斯语SEO靠我这种从右往左的文字排列顺序。为true表示支持,为false!则表示不支持。android:theme,指定App的显示风格。注意到application下面还有个activity节点,它是活动页面的SEO靠我注册声明,只有在AndroidManifest…xml中正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认主页,之所以说该页面是App主SEO靠我页,是因为它的activity节点内部还
配置了以下的过滤信息:<intent-filter> <action android:name="android.intent.action.MSEO靠我AIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter>其SEO靠我中action节点设置的android.intent.action.MAIN表示该页面是App的入口页面,启动App时会最先打开该页面。而category节点设置的android.intent.catSEO靠我egory.LAUNCHER决定了是否在手机屏幕上显示App图标,如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就会显示两个ASEO靠我pp图标。
在XML文件中通过属性 android:text 设置文本
<TextView android:id="@+id/tv_1" SEO靠我 android:layout_width="wrap_content" android:layout_height="wrap_content" androidSEO靠我:text="Hello World!" />在Java代码中调用文本视图对象的 setText 方法设置文本
private TextView textView; @OveSEO靠我rride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstaSEO靠我nceState); setContentView(R.layout.activity_main); this.textView = (TextView) findViSEO靠我ewById(R.id.tv_1); textView.setText("你好,世界"); }还可以引用字符串string文件
在XML文件中引用(@string/namSEO靠我e名)
在Java代码中引用(R.string.name名)
在XML文件中通过属性 android:textSize 设置文本大小,单位sp,可以用px和dp
px:它是手机屏幕的最小显示单SEO靠我位,与设备的显示屏像素有关。dp:它是与设备无关的显示单位,只与屏幕的尺寸有关。sp:专门设置字体的大小,在系统中可以调整字体的大小 android:textSize="30sp"在JSEO靠我ava代码中调用setTextSize 方法设置文本大小
textView.setTextSize(30); //默认单位sp在XML文件中通过属性 android:textColor设置SEO靠我文本颜色
android:textColor="#FF000000"在Java代码中调用 setTextColor 方法设置文本颜色
textView.setTextColor(0xff000000); //SEO靠我设置字体为黑色在XML文件中通过属性 android:background 背景颜色,可以理解为填充整个控件的颜色,可以是图片
android:background="ff00ffff" SEO靠我 android:background="@drawable/iocm_1"android:layout_width 视图宽度属性
android:layout_heighSEO靠我t 视图高度属性 ,单位dp
match_parent,跟父控件保持一致wrap_content,根据内容自动分配外边距属性 android:layout_margin设置当前视图与周围平SEO靠我级视图之间的距离,还有:
layout_marginLeft、layout_marginTop、layout_marginRight、layout_marginBottom
内边距属性 android:paSEO靠我dding 设置当前视图与子视图之间的距离,还有:
paddingLeft、paddingTop、paddingRight、paddingBottom
android:layout_gSEO靠我ravity 设置当前视图与父控件的对齐方式
android:gravity 设置当前视图与子视图之间的对齐方式
center_horizontal(水平居中)center_vertical(垂直居中)cenSEO靠我ter(中央)还包括:left、top、right、bottom,可以用竖线连接,如"left|top"表示朝左上角对齐
通过属性android:orientatioSEO靠我n将内部的控件在线性方向上依次排列
vertical(水平排列),水平方向从左往右排horizontal(垂直排列),垂直方向从上往下排若不指定,默认水平排列
线性布局的子视图各自拥有多大比例的宽高,SEO靠我通过在子视图中设置android:layout_weight 属性,形成宽高比例
使子视图的位置由其它视图决定
属性描述android:layout_centerHoSEO靠我rizontal如果为true,将该控件的置于水平居中android:layout_centerVertical如果为true,将该控件的置于垂直居中android:layout_centerInPaSEO靠我rent如果为true,将该控件的置于父控件的中央android:layout_alignParentTop如果为true,将该控件的顶部与其父控件的顶部对齐android:layout_alignPSEO靠我arentBottom如果为true,将该控件的底部与其父控件的底部对齐android:layout_alignParentLeft如果为true,将该控件的左部与其父控件的左部对齐android:lSEO靠我ayout_alignParentRight如果为true,将该控件的右部与其父控件的右部对齐android:layout_below=“@id/view_1”将该控件置于"@id/view_1"控件SEO靠我下边android:layout_above=“@id/view_1”将该控件置于"@id/view_1"控件上边android:layout_toLeftOf=“@id/view_1”将该控件置于"SEO靠我@id/view_1"控件的左边android:layout_toRightOf =“@id/view_1”将该控件置于"@id/view_1"控件的右边android:layout_alignTopSEO靠我 =“@id/view_1”将该控件的顶部边缘与"@id/view_1"顶部边缘对齐android:layout_alignBottom =“@id/view_1”将该控件的底部边缘与"@id/vieSEO靠我w_1"底部边缘对齐android:layout_alignLeft =“@id/view_1”将该控件的左边缘与"@id/view_1"的左边缘对齐android:layout_alignRightSEO靠我 =“@id/view_1”将该控件的右边缘与"@id/view_1"的右边缘对齐支持多行多列的表格排列,默认从左往右、从上往下排列
android:columnCounSEO靠我t,网格的列数,每行能放多少个视图android:rowCount,网格的行数,每列能放多少个视图ScrollView 设置垂直方向的滚动视图
HorizontalScrSEO靠我ollView 设置水平方向滚动视图
由TextView派生而来的,但是Button拥有默认的按钮背景,内部文本默认居中对齐,会将内部文本中的英文默认转换为大写
android:tSEO靠我extAllCaps,是否将英文字母转换为大写,默认为"ture"在xml文件中通过属性 android:clickable 设置是否点击
onClick方法设置按钮的监听器,点击按钮调用对应的方法,方SEO靠我法格式 public void XXXX(View v)
这个监听目前已经淘汰,但是可以用
private Button mBtn3; @Override protectSEO靠我ed void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); seSEO靠我tContentView(R.layout.activity_button); mBtn3 = (Button) findViewById(R.id.btn_3); mSEO靠我Btn3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(SEO靠我View v) { Toast.makeText(ButtonActivity.this, "btn3被点击了", Toast.LENGTH_SHORT).show(); SEO靠我 } }); }使用drawableXXX属性,可以将图片与按钮结合,使用paddingXXX即可调整其位置
注意:
Button默认背景蓝紫色,若手动设置的颜色无效,可SEO靠我能是因为res/values/themes.xml中的parent=“Theme.MaterialComponents.DayNight.DarkActionBar”,只需要将DarkActionBaSEO靠我r改为Bridge
监听器,专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。
按钮控件有两种常用的监听器: 点击监听器,通过setOnClicSEO靠我kListener方法设置。按钮被按住少于S00毫秒时,会触发点击事件。长按监听器,通过setOnLongClickListener方法设置。按钮被按住超过500毫秒时,会触发长按
事件。 SEO靠我 private Button mBtn3; @Override protected void onCreate(Bundle savedInstanceStateSEO靠我) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_button); SEO靠我 mBtn3 = (Button) findViewById(R.id.btn_3); mBtn3.setOnClickListener(new View.OnClickLiSEO靠我stener() { @Override public void onClick(View v) { Toast.makeText(ButtonActSEO靠我ivity.this, "btn3被点击了", Toast.LENGTH_SHORT).show(); } }); }不可用按钮:按SEO靠我钮不允许点击,即使点击也没反应,同时按钮文字为灰色
可用按钮:按钮允许点击,点击按钮会触发点击事件,同时按钮文字为正常的黑色
在XML文件中通过android:enabled设置属性是否允许点击
androSEO靠我id:enabled="true"在Java代码中通过setEnabled方法设置属性是否允许点击
bn_t.setEnabled(false)在XML文件中通过属性 anSEO靠我droid:src 设置图片资源
android:src="@drawable/iocm_1"在Java代码中通过setImageResource方法设置图片资源
imageView_1.setImageRSEO靠我esource(R.drawable.iocm_1)ImageView本身默认图片居中显示,若要改变图片的显示方式,可通过scaleType属性设定,
XML文件中ScaleType类中描述fitXYFSEO靠我IT_XY拉伸图片使其正好填满视图(图片可能被拉伸变形)fitStartFIT_START保持宽高比例,拉伸图片使其位于视图上方或左侧fitCenterFIT_CENTER保持宽高比例,拉伸图片使其位SEO靠我于视图中间fitEndFIT_END保持宽高比例,拉伸图片使其位于视图下方或右侧centerCENTER保持图片原尺寸,并使其位于视图中间centerCropCENTER_CROP拉伸图片使其充满视图SEO靠我,并位于视图中间centerlnsideCENTER_INSIDE保持宽高比例,缩小图片使之位于视图中间(只缩小不放大)在XML文件中通过属性 android:scaleType 设置图片显示方式
andrSEO靠我oid:scaleType="fitXY"在Java代码中通过setScaleType方法设置图片显示方式
imageView_1.setImageResource(ImageView.ScaleTypSEO靠我e.FIT_XY)显示图片的图像按钮,继承自ImageView,ImageButton只能显示图片,且图片按比例自动缩放,可以设置两张图片,实现叠加效果
androiSEO靠我d:foreground,设置前景图android:background,设置背景图Android的四大组件之一
Activity整个生命周期中有四种状态:
运行状态:在用户界面中最上层,完全能被用户看到,能够与用户进行交互
暂停状态:ActiviSEO靠我ty失去焦点,Activity界面被部分遮挡,该Activity不再处于用户界面的最上层,且不能够与用户进行交互
停止状态:Activity在界面上完全不能被用户看到,也就是说这个Activity被其他SEO靠我Activity全部遮挡,但它依然保持所有状态和成员信息,只是它不再可见,它的窗口被隐藏
终止状态:被系统清理出内存
从当前页面跳转到新页面
startActivity(源页面.this, 目SEO靠我标页面.class)从当前页面回到上一个页面,相当于关闭当前页面
finish(); //结束当前的活动页面onCreate
:创建活动。把页面布局加载进内存,进入了初始状态。
onStart:SEO靠我开始活动。把活动页面显示在屏幕上,进入了就绪状态。
onResume:恢复活动。活动页面进入活跃状态,能够与用户正常交互,例如允许响应用户的点击动作、允许用户输入文字等等。
onPause:暂停活动。页面SEO靠我进入暂停状态,无法与用户正常交互。
onStop:停止活动。页面将不在屏幕上显示。
onDestroy:销毁活动。回收活动占用的系统资源,把页面从内存中清除。
onRestart:重启活动。重新加载内存中的SEO靠我页面数据。
onNewlntent:重用已有的活动实例。各状态之间的切换过程:
打开新页面的方法调用顺序
onCreate》onStart》onResume
关闭旧页面的方法调用顺序
onPause》onStoSEO靠我p》onDestroy
该模式下,启动的Activity会依照启动顺序被依次压入Task栈中
该模式下,如果栈顶Activity为我们SEO靠我要新建的Activity,那么就不会重复创建新的Activity
该模式下,如果task栈内存中存在目标Activity实例,则将task内的对应Activity实例之上SEO靠我的所有Activity弹出栈,并将对应Activity置于栈顶
该模式下,我们会为目标Activity创建一个新的task栈,将目标Activity放入新的tasSEO靠我k,并让目标Activity获得焦点。新的task有且只有这一个Activity实例。如果已经创建过目标Activity实例,则不会创建新的task,而是将以前的创建过的Activity唤醒。
Intent是各个组件之间信息沟通SEO靠我的桥梁,用于各个组件之间的通信
元素名称设置方法说明ComponentsetComponent组件,指定意图的来源与目标ActionsetAction动作,指定意图的动作行为DatasetDataUriSEO靠我,指定动作要操作的数据路径CategoryaddCategory类别,指定意图的操作类别TypesetType数据类型,指定消息的数据类型ExtrasputExtras扩展信息,指定装载的包裹信息FlSEO靠我agssetFlags标志位,指定活动的启动标志直接指定来源活动与目标活动,属于精准匹配
在Intent的构造函数中指定
Intent intent = new Intent(this, SEO靠我ActNextActivity.class);调用意图对象的setClass方法指定
Intent intent = new Intent(); intent.setClass(thisSEO靠我, ActNextActivity.class);调用意图对象的setComponent方法指定
Intent intent = new Intent(); ComponentName SEO靠我component = new ComponentName(this, ActNextActivity.class); intent.serComponent(component);没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,属于模糊匹配
Intent类的系统动作常量名系统动作常量值说明ACTION_MAINandroid.intent.actiSEO靠我on.MAINapp启动时的入口ACTION_VIEWandroid.intent.action.VIEW向用户显示数据ACTION_SENDandroid.intent.action.SEND分享内SEO靠我容ACTION_CALLandroid.intent.action.CALL直接拨号ACTION_DIALandroid.intent.action.DIAL准备拨号ACTION_SENDTOandrSEO靠我oid.intent.action.SENDTO发送短信ACTION_ANSWERandroid.intent.action.ANSWER接听电话动作名称既可以通过setAction方法指定,也可以通SEO靠我过构造函数Intent(String action)直接生成意图对象
Intent使用Bundle对象存放待传递的数据信息
Bundle对象操作各类型数据的读写方法
数据类型读方法写方法整型getISEO靠我ntputInt浮点getFloatputFloat双精度getDoubleputDouble布尔值getBooleanputBoolean字符串getStringputString字符串数组getSSEO靠我tringArrayputStringArray字符串列表getStringArrayListputSrtingArrayList可序列化结构getSerializableputSerializablSEO靠我e发送消息包裹,调用意图对象的putExtras方法
接收消息包裹,调用意图对象的getExtras方法
处理下一个页面的应答数据
上一个页面打包好请求数据,调用registerForActivitSEO靠我yResult方法执行跳转动作下一个页面接收并解析请求数据,进行相应处理下一个页面在返回上一个页面时,打包应答数据并调用setResult方法返回数据包裹上一个页面重写方法onActivityResuSEO靠我lt,解析获得下一个页面的返回数据Android把所有能够显示的图形都抽象为Drawable类(可绘制的)。包括图片、色块、画板、背景等。
drawable目录一般保存描SEO靠我述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下
drawable-ldpi里面存放低分辨率的图片(如240×320),现在基本没有这样的智能手机了drawable-mdpi里面存SEO靠我放中等分辨率的图片(如320×480),这样的智能手机已经很少了drawable-hdpi里面存放高分辨率的图片(如480×800),一般对应4英寸~4.5英寸的手机(但不绝对,同尺寸手机有可能分辨率SEO靠我不同,手机分辨率就高不就低,因为分辨率低了屏幕会有模糊的感觉)drawable-xhdpi里面存放加高分辨率的图片(如720×1280),一般对应5英寸~5.5英寸的手机drawable-xxhdpiSEO靠我里面存放超高分辨率的图片(如1080×1920),一般对应6英寸~6.5英寸的手机drawable-xxxhdpi里面存放超超高分辨率的图片(如1440×2560),一般对应7英寸以上的平板电脑分辨率SEO靠我每加大一级,宽度和高度就要增加二分之一或三分之一像素。在开发Ap时,为了兼容不同的手机屏幕,在各目录存放不同分辨率的图片(Android会根据手机的分辨率适配对应文件夹里的图片),从而提升视觉效果
形状图形的定义文件是以shape标签为根节点的XML描述文件,支持4种类型的形状:
形状说明rectangle矩形,默认为矩形oval椭圆。此时corners节点会失效line直线。此时必SEO靠我须设置stroke节点,否则会报错ring圆环size是shapel的下级节点,用来描述形状图形的宽高尺寸。若无size节点,则表示宽高与宿主视图一样大小。
height:图形高度widSEO靠我th:图形宽度stroke是shapel的下级节点,用来描述形状图形的描边规格。若无stroke节点,则表示不存在描边。
color:描边的颜色
dashGap:每段虚线之间的间隔
daSEO靠我shWidth:每段虚线的宽度。若dashGap和dashWidth有一个值为O,则描边为实线
width:描边的厚度
corners是shapef的下级节点,用来描述形状图形的圆角SEO靠我大小。若无corners-节点,则表示没有圆角。
bottomLeftRadius:左下圆角的半径bottomRightRadius:右下圆角的半径topLeftRadius:左上圆角的半径topRigSEO靠我htRadius:右上圆角的半径radius:4个圆角的半径solid是shapel的下级节点,用来描述形状图形的填充色彩。若无solid节点,则表示无填充颜色。
coor:内部填充的SEO靠我颜色padding是shapel的下级节点,用来描述形状图形与周围边界的间隔。若无padding节点,则表示四周不设间隔。
top:与上方的间隔bottom:与下方的间隔left:SEO靠我与左边的间隔right:与右边的间隔gradient是shape的下级节点,用来描述形状图形的颜色渐变。若无gradient节点,则表示没有渐变效果。
angle:渐变的起始角度SEO靠我。为0时表示时钟的9点位置,值增大表示往逆时针方向旋转。如:值为90表示6点位置,值为180表示3点位置,值为270表示0点/12点位置type:渐变类型,linear(线性渐变,默认)、radialSEO靠我(放射渐变)、sweep(滚动渐变)centerX:圆心的X坐标。当android:type="‘linear’"时不可用centerY::圆心的Y坐标。当android:type="linear’"SEO靠我时不可用gradientRadius:渐变的半径。当android:type="radial"时需要设置该属性centerColor:渐变的中间颜色startColor:渐变的起始颜色endColorSEO靠我:渐变的终止颜色useLevel:是否无渐变色,true为无渐变色、false为有渐变色CompSEO靠我oundButton在XML文件中主要属性:
checked:指定按钮的勾选状态,true表示勾选,false则表示未勾选。默认为未勾选button=“@null” 表示取消自带的默认样式buto:指定SEO靠我左侧勾选图标的图形资源,如果不指定就使用系统的默认图标CompoundButton在Java代码中主要方法:
setChecked:设置按钮的勾选状态setButtonDrawable:设置左侧勾选图标SEO靠我的图形资源setOnCheckedChangeListener:设置勾选状态变化的监听器isChecked:判断按钮是否勾选Switch开关按钮在XML文件新添加的属性:
textOn:设置右侧开启时的SEO靠我文本textOff:设置左侧关闭时的文本track:设置开关轨道背景thumb:设置开关标识图标RadioGroup单选组实质上是个布局,同一组RadioButton都要放在同一个RadioGroupSEO靠我节点下。RadioGroup提供了orientation属性指定下级控件的排列方向,该属性为horizontal时,单选按钮在水平方向排列;该属性为vertical时,单选按钮在垂直方向排列。
RadiSEO靠我oGroup下面还可以挂载其他子控件(如TextView、ImageView等)。单选组相当于特殊的线性布局,它们的主要区别:
单选组多了管理单选按钮的功能,而线性布局不具备该功能如果不指定orientSEO靠我ation,属性,那么单选组默认垂直排列,而线性布局默认水平排列RadioGroup在Java代码中常用方法:
check:选中指定资源编号的单选按钮getCheckedRadioButtonld:获取SEO靠我已选中单选按钮的资源编号setOnCheckedChangeListener:设置单选按钮勾选变化的监听器EditText在XML文件新添加的属性:
int:设置文本提示内容tSEO靠我extColorHint:设置文本提示内容的颜色macLength:设置文本输入的最大长度inputType:设置文本输入类型,如:textPassword(显示文本为*号) 、number(整数)、SEO靠我numberDecimal(小数)Spinner在XML文件中的属性没什么特别的,主要是在Java文件中设置监听、适配器
// 定义下拉列表要显示的文本数组 pSEO靠我rivate String[] heroNames = {"美美1号", "美美2号", "美美3号", "美美4号"}; private Spinner mSpinner; SEO靠我 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sSEO靠我avedInstanceState); setContentView(R.layout.activity_main); mSpinner = (Spinner) finSEO靠我dViewById(R.id.spinner); // 声明一个下拉列表的数组适配器 ArrayAdapter mAdapter = new ArrayAdapter(SEO靠我this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, heroNames); mSpinnerSEO靠我.setAdapter(mAdapter); // 设置下拉框默认显示第一项 mSpinner.setSelection(0); mSpinner.sSEO靠我etOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override publicSEO靠我 void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { String strMsg =SEO靠我 "您选择了\""+heroNames[i]+"\"!"; Toast.makeText(MainActivity.this, strMsg, Toast.LENGTH_LONG).sSEO靠我how(); } @Override public void onNothingSelected(AdapterView<?> adapterView)SEO靠我 { } }); }设置数组适配器
private ListView mListView; private StrinSEO靠我g[] names = {"美美1号", "美美2号", "美美3号", "美美4号"}; private List<HashMap> dataList; @OverSEO靠我ride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanSEO靠我ceState); setContentView(R.layout.activity_main); mListView = findViewById(R.id.listSEO靠我view); // 声明一个数组适配器 ArrayAdapter mAdapter = new ArrayAdapter(this, androidx.appcompaSEO靠我t.R.layout.support_simple_spinner_dropdown_item, names); mListView.setAdapter(mAdapter); SEO靠我 }GridView新添加的属性:
XML中的属性GridView类的设置方法说明horizontalSpacingsetHorizontalSpacing指定网格顶SEO靠我在水平方向的间距verticalSpacingsetVerticalSpacing指定网格顶在垂直方向的间距numColumnssetNumColumns指定列的数目stretchModesetStrSEO靠我etchMode指定剩余空间的拉伸模式columnWidthsetColumnWidth指定每列的宽度;拉伸模式为spacingWidth、spacingWidthUniform时,必须指定列宽 SEO靠我 private String[] names = new String[] {"美美1号", "美美2号", "美美3号", "美美4号"}; List imagelistSEO靠我; private GridView mGridView; @Override protected void onCreate(Bundle saveSEO靠我dInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activiSEO靠我ty_main); mGridView=findViewById(R.id.gridview); // 声明一个数组适配器 ArrayAdapter mSEO靠我Adapter = new ArrayAdapter(this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, nSEO靠我ames); mGridView.setAdapter(mGridView); }RecyclerView能够灵活实现大数据集的展示,视图的SEO靠我复用管理比ListView更好,能够显示列表、网格、瀑布流等形式,且不同的ViewHolder能够实现item多元化的功能。简单来说,就是列表和网格的一个优化版
翻页视图就SEO靠我是允许页面在水平方向左右滑动
setAdapter:设置页面项的适配器。适配器用的是PagerAdapter及其子类
setCurrentItem:设置当前页码,也就是要显示哪个页面
addOnPageChSEO靠我angeListener:添加翻页视图的页面变更监听器。该监听器需实现接
OnPageChangeListener下的3个方法,
onPageScrollStateChanged:在页面滑动状态变化时触发SEO靠我onPageScrolled:在页面滑动过程中触发onPageSelected:在选中页面时,即滑动结束后触发 getCount:获取页面项的个数isViewFromObject:判断SEO靠我当前视图是否来自指定对象,返回view == object即可instantiateItem:实例化指定位置的页面,并将其添加到容器中destroyItem:从容器中销毁指定位置的页面getPageTSEO靠我itle:获得指定页面的标题文本,有搭配翻页标签栏时才要实现该方法SharedPreferences是Android的一个轻量级存储工具,采用的存储结SEO靠我构Key-Vaue的键值对方式,存储在XML规范的配置文件中(路径:/data/data/应用包名/shared_perfs/文件名.xml)
运用场合:
简单且孤立的数据文本形式的数据需要持久化存储的数SEO靠我据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreSEO靠我ate(savedInstanceState); setContentView(R.layout.activity_main); et_name = findViewBSEO靠我yId(R.id.et_name); et_age = findViewById(R.id.et_age); et_height = findViewById(R.idSEO靠我.et_age); preferences = getPreferenceScreen("config", Context.MODE_PRIVATE); reload(SEO靠我); findViewById(R.id.btn_save).setOnClickListener(new View.OnClickListener() { @OveSEO靠我rride public void onClick(View view) { String name = et_name.getText().toString(); SEO靠我 String age = et_age.getText().toString(); String height = et_height.getText().toStrinSEO靠我g(); //储存数据 SharedPreferences.Editor editor = preferences.edit(); editor.puSEO靠我tString("name", name); editor.putInt("age", Integer.parseInt(age)); editor.putFloat(SEO靠我"height", parseFloat(height)); editor.commit(); } }); } //SEO靠我获取数据 private void reload() { String name = preferences.getString("name", null); SEO靠我 if (name != null) { et_name.setText(name); } int age = preferences.getInSEO靠我t("age", 0); if (age != 0) { et_age.setText(String.valueOf(age)); } SEO靠我float height = preferences.getFloat("height", 0f); if (height != 0f) { et_height.setSEO靠我Text(String.valueOf(height)); } } }在Java代码中操作SQLite需要专SEO靠我门的工具类,SQLiteDatabase是Android提供的SQLite数据库管理器
管理类:
openOrCreateDatabase:打开指定路径的数据库,不存在则创建
deleteDatabase:SEO靠我删除指定路径的数据库
isOpen:判断数据库是否打开
close:关闭数据库
getVersion:获取数据库的版本号
setVersion:设置数据库的版本号
事务类:
beginTransaction:开始SEO靠我事务
setTransactionSuccessful:设置事务的成功标志
endTransaction:结束事务
数据处理类:
execSQL:执行拼接好的SQL控制语句
delete:删除符合条件的记录
upSEO靠我date:更新符合条件的记录
insert:插入一条记录
query:执行查询操作,返回结果集的游标
rawQuery:执行拼接好的SQL查询语句,返回结果集的游标
SQLitSEO靠我eOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用
Android的位图工具是Bitmap,app读写Bitmap可以使用性能更好的BuffSEO靠我eredOutputStream和BufferedInputStream。
Android还提供了BitmapFactory工具用于读取各种来源图片方法:
decodeResource:该方法可从资源文件SEO靠我中读取图片信息
decodeFile:该方法可将指定路径的图片读取到Bitmap对象
decodeStream:该方法从输入流中读取位图数据
Application是AndroidSEO靠我的一大组件,在app运行过程中有且仅有一个Application对象贯穿整个生命周期
Application类的方法说明onCreate()在Application创建的时候调用,一般用于初始化,如全局SEO靠我的对象,环境的配置等onConfigurationChanged(Configuration newConfig)重写此方法可以监听APP一些配置信息的改变事件onLowMemory()重写此方法可以SEO靠我监听Android系统整体内存较低时候的事件onTerminate()在程序结束的时候会调用。但这个方法在Android产品机是不会调用的ContentProvideSEO靠我r是Android的一大组件,为app存取内部数据提供统一的外部接口,让不同的应用之间可以共享数据
动态申请权限:
检查App是否开启了指定权限
调用ContextCompat的checkSelfPermiSEO靠我ssion方法
请求系统弹窗,以便用户选择是否开启权限
调用ActivityCompati的requestPermissions?方法,即可命令系统自动弹出权限申请窗口
判断用户的权限选择结果
重写活动页面的SEO靠我权限请求回调方法onRequestPermissionsResult,在该方法内部处理用户的权限选择结果
传统的Activity并不能很好的处理大屏问题,所以就出现了FragmentSEO靠我,能够划分区域的展示内容,且有属于自己的独立可操作空间
静态注册在布局文件中直接指定Fragment,而动态注册直接在代码中才动态添加Fragment
方法说明onAttach()Fragment和ActSEO靠我ivity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数onCreate()Fragment被创建时调用onCreateView()创建FragmSEO靠我ent的布局onActivityCreated()当Activity完成onCreate()时调用onStart()当Fragment可见时调用onResume()当Fragment可见且可交互时调用SEO靠我onPause()当Fragment不可交互但可见时调用onStop()当Fragment不可见时调用onDestroyView()当Fragment的UI从视图结构中移除时调用onDestroy()SEO靠我销毁Fragment时调用onDetach()当Fragment和Activity解除关联时调用这是我写的笔记,不是很全,还望谅解哈!!!
网站备案号:浙ICP备17034767号-2