1.系统主题
2.背景选择器
android图片选择器和颜色选择器(合称背景选择器)
图片选择器:drawable中新建选择器xml文件imageselector.xml
<?xml version=“1.0” encoding=“utf-8”?> <selector xmlns:android=“http://schemas.android.com/apk/res/android” > <item android:state_pressed=“true” android:drawable=“@drawable/aa”/> <item android:drawable=“@drawable/bb”/> </selector> |
颜色选择器:color中新建颜色选择器xml文件:colorselector.xml
<?xml version=“1.0” encoding=“utf-8”?> <selector xmlns:android=“http://schemas.android.com/apk/res/android” > <item android:state_pressed=“true” android:color=“#00FF00”/> <item android:color=“#FF0000”/> </selector> |
在布局文件activty_main.xml文件中设置一个Button:
<Button android:id=“@+id/btn” android:layout_width=“match_parent” android:layout_height=“wrap_content” android:text=“背景选择器测试” android:background=“@drawable/imageselector” android:textColor=“@drawable/colorselector”/> |
运行效果:
点击该按钮后效果:
颜色选择器直接用在设置颜色的地方没问题,但是如background可以放图片也可以放颜色,当直接用颜色选择器报错。解决方法:把颜色当图片用,颜色不要直接写值,写死了,在colors.xml定义后引用即可。
colors.xml:
<?xml version=“1.0” encoding=“utf-8”?> <resources> <string name=“app_name”>AppUIDemo</string> <string name=“hello_world”>Hello world!</string> </resources> |
将颜色选择器定义成图片选择器:
<?xml version=“1.0” encoding=“utf-8”?> <selector xmlns:android=“http://schemas.android.com/apk/res/android” > <item android:state_pressed=“true” android:drawable=“@color/color1”/> <item android:drawable=“@color/color2”/> </selector> |
引用:
android:background=“@drawable/colorselector2” |
运行效果:
点击后:
3. android UI android界面
3.1 TextView:
android:autoLink=“all” 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)
android:ellipsize=“marquee” 设置当文字过长时,该控件该如何显示,可选值start,end,marquee:滚动,跑马灯效果,不能设autoLink,并且只有获得焦点时才会有滚动效果,所以需设置:
android:focusableInTouchMode=“true”android:focusable=“true”
android:focusable=“true” 可以获得焦点
android:focusableInTouchMode=“true” 触摸可以获得焦点
android:marqueeRepeatLimit=“marquee_forever” 设置重复滚动的次数
android:singleLine=“true” 设置单行显示
android:textColorLink=“#ff0099” 文字链接的颜色
android:tag=“yes” View中添加一个tag,相当于一个兜,想放什么就放什么,用的时候再取出来
说明:Android系统中TextView实现跑马灯效果,必须具备以下几个条件:
1)、android:ellipsize=“marquee”
2)、TextView必须单行显示,即内容必须超出TextView大小
3)、TextView要获得焦点才能滚动
3.2 EditText:
3.2.1 EditText属性
android:digits=“12345” 设置只接受某些数字
android:inputType=“number” 设置输入文本的类型
android:numeric=“integer” 设置输入文本的类型,跟输入法有关系,不推荐使用了
android:phoneNumber=“true” 设置输入文本的类型(数字)
android:drawableBottom=“@drawable/icon”文字下方放一个图片
android:cursorVisible=“false” 设置光标是否可见
android:hint=“demo” 为空时显示的文字提示信息
android:textColorHint=“@color/mycolor” 提示文字颜色
android:imeOptions=“actionGo” Enter键图标设置
可选值有:
actionGo actionSearch
actionSend actionNext
actionDone
android:lines=“3” 设置文本的行数
android:maxLines=“3” 设置文本的最大显示行数
android:minLines=“3”设置文本的最小行数
android:lineSpacingExtra=“10dp” 设置行间距
android:lineSpacingMultiplier=“2”行间距的倍数
android:password=“true” 密码方式显示
android:visibility=“gone” 是否可见
android:textColor=“#ffcc00” 设置文本颜色
android:textColorHighlight =“#ffcc00”被选中文字的底色 ,默认为蓝色
android:textColorHint =“#ffcc00” 设置提示信息文字的颜色,默认为灰色
android:editable=”false” 设置是否可被编辑
android:enabled=“false” 设置是否可用
android:textScaleX =“1” 文字放大比例
android:textSize =“30sp” 设置文字大小
android:textStyle 设置字形[bold(粗体) 0,italic(斜体)]
android:typeface 设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3
android:height="10dp”高度
android:maxHeight =“10dp” 最大高度
android:minHeight =“10dp” 最小高度
android:width =“20dp” 宽度
android:maxWidth=“20dp” 最大宽度
android:minWidth =“20dp” 最小宽度
android:selectAllOnFocus=“true” 获取焦点时选中所有内容
android:shadowColor=“#ff0099” 指定文本阴影的颜色
android:shadowDx=“2” 设置阴影横向坐标开始位置。
android:shadowDy=“2” 设置阴影纵向坐标开始位置。
android:shadowRadius=“3” 设置阴影的半径(一般设置为3)
android:ems=“3” 设置宽度(单位字符)
android:maxems =“3”设置最长宽度
android:minems=“3” 设置最短宽度
android:maxLength=5 限制输入字符数
android:translationX=“100dp” X轴方向移动
android:translationY=“100dp” Y轴方向移动
android:layout_margin=”50dp” 当前View与周边View距离
android:padding=”50dp” 当前View与内部内容距离
android:layout_gravity=“left” 当前View对齐方式
android:gravity=“left” 当前View内部内容对齐方式
android:layout_weight=“1”权重(剩余空间按比例划分)
区别:gravity与layout_gravity
gravity控件中的内容相对于控件的对齐方式
layout_gravity控件相对于控件所在容器的对齐方式
在纵向线性布局中,只有左中右有效,上中下无效
在横向线性布局中,只有上中下有效,左中右无效
注意:
match_parent把界面上剩下的空间占满,它前面的没影响,它后面的在当前页面显示不出来
layout_weight:权重,把剩余空间平分,建议写法layout_width=“0dp”
解释:3个Button水平占一行,如果layout_width都是wrap_content那么字符数多的全部显示,并且占的要宽,把剩余的空间平分;
如果layout_width都是match_parent那么各占1/3。
假设一个屏幕宽度是n,3个button各占n,即3n,那么
剩余空间=屏幕宽度n - 控件的总宽度3n = -2n,
平均分成3份即-2n/3
这样,每个控件实际占的是n-2n/3=n/3
也就是说平均分配屏幕宽度
3.2.2 EditText常用监听
setOnTouchListener触摸监听
setOnClickListener 单击监听(对于不可点击View可以添加android:clickable=“true”)
setOnDragListener 拖拽监听
setOnEditorActionListener编辑监听
setOnFocusChangeListener焦点改变监听
setOnKeyListener (View与Activity)按键监听
addTextChangedListener(new TextWatcher(){})文本内容改变监听
setOnLongClickListener长按监听
setOnCreateContextMenuListener创建上下文菜单监听
beforeTextChanged()
onTextChanged()
作用在TextView上,给它注册一个上下文菜单
textview.setOnCreateContextMenuListener();
getMenuInflater().inflate(R.id.main,menu);
4. Menu菜单
ContextMenu上下文菜单:
PopupMenu弹出菜单:
OptionsMenu选项菜单
@Override publicboolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); returntrue; } @Override publicboolean onOptionsItemSelected(MenuItem item) { intid = item.getItemId(); if (id == R.id.action_settings) { returntrue; } returnsuper.onOptionsItemSelected(item); } |
5. 单选RadioButton与多选CheckBox
注意:每一个Layout都要指定它的宽和高,否则报错
(1)获取单选、多选状态:
单选:1.for循环;2.单选按钮组
多选:for循环
privateint[] ids = { R.id.a, R.id.b, R.id.c }; private CheckBox[] cbs = new CheckBox[ids.length]; private RadioButton rb1; private RadioGroup group; rb = (RadioButton) this.findViewById(R.id.man); group = (RadioGroup) this.findViewById(R.id.group); intcheckedId = group.getCheckedRadioButtonId(); RadioButton rb2 = (RadioButton) this.findViewById(checkedId); //填充cbs中三个多选按钮 for (inti = 0; i < ids.length; i++) { cbs[i] = (CheckBox) this.findViewById(ids[i]); System.out.println(cbs[i].getText().toString() + " " + cbs[i].isChecked()); } |
运行截图:
2. 区别:单击监听与状态改变监听
单击监听:只有单击才会触发
状态改变并不一定要单击,也可以通过程序改变
单击监听: rb = (RadioButton) this.findViewById(R.id.man); rb.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { Toast.makeText(MainActivity.this, rb.getText().toString(), 0).show(); } }); 状态改变监听: rb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override publicvoid onCheckedChanged(CompoundButton buttonView, booleanisChecked) { RadioButton rb = (RadioButton) buttonView; Toast.makeText(MainActivity.this, rb.getText().toString() + " " + isChecked, 0).show(); if (!isChecked) { // 通过循环让所有多选按钮取消选中状态 for (CheckBox cb : cbs) { cb.setChecked(false); } } } }); |