概念
android会根据不同的屏幕分辨率家在不同的文件夹,如果你想禁止Android不跟随屏幕密度加载不同文件夹的资源,只需在AndroidManifest.xml文件中添加android:anyDensity="false"字段即可!
raw目录: 用于存放各种原生资源(音频,视频,一些XML文件等),我们可以通过openRawResource(int id)来获得资源的二进制流!
-
MainActivity.java主要包括以下组成部分
-
布局文件activity_main.xml,我们定义一个LinearLayout线性布局,在xml命名空间中定义我们所需要使用的架构,以下为代码分析
-
AndroidManifest.xml配置文件,以下为主要代码分析
除了上述内容外:
①如果app包含其他组件的话,都要使用类型说明语法在该文件中进行声明 Server:元素 BroadcastReceiver元素 ContentProvider元素 IntentFilter元素
②权限的声明: 在该文件中显式地声明程序需要的权限,防止app错误地使用服务, 不恰当地访问 资源,最终提高android app的健壮性 android.permission.SEND_SMS 有这句话表示app需要使用发送信息的权限,安装的时候就会提示用户, 相关权限可以在sdk参考手册查找!-
签名,Android APP都需要我们用一个证书对应用进行数字签名,为apk签名有以下好处:
- 应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!
- 应用程序模块化: Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。
- 代码或者数据共享: Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。
布局
Android中有六大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局) 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是LinearLayout的weight(权重属性)
LinearLayout
整体框架如下
当LinearLayout下有多个match_parent,它将会按特定的算式显示,算式如下
* step 1:个个都是fill_parent,但是屏幕只有一个啦,那么1 - 3 = - 2 fill__parent
* step 2:依次比例是1/6,2/6,3/6
* step 3:先到先得,先分给one,计算: 1 - 2 * (1/6) = 2/3 fill_parent 接着到two,计算: 1 - 2 * (2/6) = 1/3 fill_parent 最后到three,计算 1 - 2 * (3/6) = 0 fill_parent
* step 4:所以最后的结果是:one占了两份,two占了一份,three什么都木有
RelativeLayout
-
margin与padding的区别
初学者对于这两个属性可能会有一点混淆,这里区分下: 首先margin代表的是偏移,比如marginleft = "5dp"表示组件离容器左边缘偏移5dp; 而padding代表的则是填充,而填充的对象针对的是组件中的元素,比如TextView中的文字 比如为TextView设置paddingleft = "5dp",则是在组件里的元素的左边填充5dp的空间! margin针对的是容器中的组件,而padding针对的是组件中的元素,要区分开来!
TableLayout
......
控件
-
TextView
- 包含id,layout_width,layout_height,gravity,text,textColor,textStyle,textSize,background 9个基本属性。
- 带阴影的TextView
- 带边框的TextView
- 矩形边框的Drawable
- 圆角矩形边框的Drawable
-
带图片的TextView
- 使用autoLink属性识别链接类型
- TextView中插入HTML
- SpannableString&SpannableStringBuilder定制文本
- 实现跑马灯效果的TextView
- 设置TextView字间距和行间距
- 自动换行
-
EditText
- 设置默认提示文本
- 获得焦点后全选组件内所有文本内容
- 限制EditText输入类型
- 设置最小行,最多行,单行,多行,自动换行
- 设置文字间隔,设置英文字母大写类型
- 控制EditText四周的间隔距离与内部文字与边框间的距离
- 设置EditText获得焦点,同时弹出小键盘
- EditText光标位置的控制
- 带表情的EditText的简单实现
- 带删除按钮的EditText
-
Button and ImageButton
-
StateListDrawable
- drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态~
- state_focused:是否获得焦点
- state_window_focused:是否获得窗口焦点
- state_enabled:控件是否可用
- state_checkable:控件可否被勾选,eg:checkbox
- state_checked:控件是否被勾选
- state_selected:控件是否被选择,针对有滚轮的情况
- state_pressed:控件是否被按下
- state_active:控件是否处于活动状态,eg:slidingTab
- state_single:控件包含多个子控件时,确定是否只显示一个子控件
- state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
- state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
- state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态
实现按钮的按下效果
使用颜色值绘制圆角按钮
实现Material Design水波效果的Button
-
-
ImageView
- ImageView的src属性和blackground的区别;
- 解决blackground拉伸导致图片变形
- 设置透明度
- Java代码中设置blackground和src属性
- adjustViewBounds设置图像缩放时是否按长宽比
- scaleType设置缩放类型
- fitXY:对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变
- fitStart:保持纵横比缩放图片,知道较长的边与Image的编程相等,缩放完成后将图片放在ImageView的左上角
- fitCenter:同上,缩放后放于中间;
- fitEnd:同上,缩放后放于右下角;
- center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
- centerCrop:保持横纵比缩放图片,知道完全覆盖ImageView,可能会出现图片的显示不完全
- centerInside:保持横纵比缩放图片,直到ImageView能够完全地显示图片
- matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图, 原图超过ImageView的部分作裁剪处理
- 最简单的绘制圆形的ImageView
- ImageView的src属性和blackground的区别;
-
RadioButton(单选按钮)&Checkbox(复选框)
- 基本用法与事件处理
- RadioButton(单选按钮)
- CheckBox(复选框)
- 自定义点击效果
- 改变文字与选择框的相对距离
- 修改文字与选择框的距离
- 基本用法与事件处理
-
开关按钮ToggleButton和开关Switch
- ToggleButton
- android:disabledAlpha:设置按钮在禁用时的透明度
- android:textOff:按钮没有被选中时显示的文字
- android:textOn:按钮被选中时显示的文字 另外,除了这个我们还可以自己写个selector,然后设置下Background属性即可~
- Switch
- android:showText:设置on/off的时候是否显示文字,boolean
- android:splitTrack:是否设置一个间隙,让滑块与底部图片分隔,boolean
- android:switchMinWidth:设置开关的最小宽度
- android:switchPadding:设置滑块内文字的间隔
- android:switchTextAppearance:设置开关的文字外观,暂时没发现有什么用...
- android:textOff:按钮没有被选中时显示的文字
- android:textOn:按钮被选中时显示的文字
- android:textStyle:文字风格,粗体,斜体写划线那些
- android:track:底部的图片
- android:thumb:滑块的图片
- android:typeface:设置字体,默认支持这三种:sans, serif, monospace;除此以外还可以使用 其他字体文件(*.ttf),首先要将字体文件保存在assets/fonts/目录下,不过需要在Java代码中设置: Typeface typeFace =Typeface.createFromAsset(getAssets(),"fonts/HandmadeTypewriter.ttf"); textView.setTypeface(typeFace);
- ToggleButton
-
ProgressBar(进度条)
- 圆形进度条
- 水平进度条
- 使用动画替代圆形进度条
- 自定义圆形进度条
-
SeekBar(拖动条)
- 基本用法,它是ProgressBar的子类,所以进度条的属性拖动条皆可使用。
- 简单SeekBar定制
-
RatingBar(星级评分条)
基本用法,同样为ProgressBar的子类,你懂的
-
相关属性
- android:isIndicator:是否用作指示,用户无法更改,默认false
- android:numStars:显示多少个星星,必须为整数
- android:rating:默认评分值,必须为浮点数
- android:stepSize: 评分每次增加的值,必须为浮点数
- 除了上面这些,还有两种样式供我们选择咧,但是不建议使用,因为这两种样式都好丑... 他们分别是:
- style="?android:attr/ratingBarStyleSmall"
- style="?android:attr/ratingBarStyleIndicator"
-
事件处理
- 只需为RatingBar设置OnRatingBarChangeListener事件,然后重写下onRatingChanged()方法即可!
定制
-
ScrollView(滚动条)
- 滚动到底部
- 设置滚动到滑块图片
- 隐藏滑块
- 设置滚动速度
-
Date&Time组件
TextClock
AnalogClock(模拟时钟)
Chronometer(计时器)
-
DatePicker(日期选择器)
- android:calendarTextColor : 日历列表的文本的颜色
- android:calendarViewShown:是否显示日历视图
- android:datePickerMode:组件外观,可选值:spinner,calendar 前者效果如下,默认效果是后者
- android:dayOfWeekBackground:顶部星期几的背景颜色
- android:dayOfWeekTextAppearance:顶部星期几的文字颜色
- android:endYear:去年(内容)比如2010
- android:firstDayOfWeek:设置日历列表以星期几开头
- android:headerBackground:整个头部的背景颜色
- android:headerDayOfMonthTextAppearance:头部日期字体的颜色
- android:headerMonthTextAppearance:头部月份的字体颜色
- android:headerYearTextAppearance:头部年的字体颜色
- android:maxDate:最大日期显示在这个日历视图mm / dd / yyyy格式
- android:minDate:最小日期显示在这个日历视图mm / dd / yyyy格式
- android:spinnersShown:是否显示spinner
- android:startYear:设置第一年(内容),比如1994年
- android:yearListItemTextAppearance:列表的文本出现在列表中。
- android:yearListSelectorColor:年列表选择的颜色
TimePicker
-
CalendarView(日期视图)
- android:firstDayOfWeek:设置一个星期的第一天
- android:maxDate :最大的日期显示在这个日历视图mm / dd / yyyy格式
- android:minDate:最小的日期显示在这个日历视图mm / dd / yyyy格式
- android:weekDayTextAppearance:工作日的文本出现在日历标题缩写
-
ListView
- 自定义BaseAdapter,然后绑定ListView
- 表头表位分割线的设置
- 列表从底部开始显示
- 设置点击颜色cacheColorHint
- 隐藏滑动条
此为初学Android时记的笔记,因效率较低故停下。