安卓中的UI
Posted 小筱萌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓中的UI相关的知识,希望对你有一定的参考价值。
1)Buttons (按钮)a)Button
按钮
添加onClick监听事件
b)ImageButton
图片按钮
添加onClick监听事件
c)Switch(开关):checked
应用:可以添加onClick监听事件实现相应事件可以用if判断
Switch btn=(Switch)v;//开关
if(btn.isChecked())
Toast.makeText(this,"打开wifi", 1).show();
else
Toast.makeText(this,"关闭wifi", 1).show();
也可以用setOnCheckedChangeListener添加监听
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked)
Toast.makeText(MainActivity.this,"tBtn.isChecked="+isChecked, 1).show();
方法: isChecked() 判断是否打开开关,
d)CheckBox(复选框):checked(多选框)
应用;可以添加onClick监听事件
(textAppearance="?android:attr/textAppearanceMedium"
优先选用系统的属性)textview中的字体属性
if(box.isChecked())//判定是否是选中的
checked.add(box.getText().toString());
e)RadioButton(单选框):RadioGroup(线性布局的子类类型)
应用;可以添加onClick监听事件
public void onClick(View v)
RadioButton rBtn = (RadioButton)
// 获得选中的Button
findViewById(rGroup.getCheckedRadioButtonId());
Toast.makeText(this, rBtn.getText().toString(), 1).show();
RadioGroup(线性布局的子类类型)
中可设置水平或垂直
RadioButton 中android:drawableTop/Bottom 可设置图片所在的位置上下左右
多个radioButton 可以引用style="@style样式来减少代码量
2)TextFields (文本域)
a)EditText(编辑框)
应用可设置点击事件、和触摸事件
//设定对象可编辑
edit03.setFocusable(true);
edit03.setFocusableInTouchMode(true);
//设定光标位置
edit03.setSelection(edit03.getText().length());
<!-- 设定EditText默认有焦点的对象 -->
<requestFocus />
android:focusable="false" 设置默认不可编辑
设置更改文本编辑框的格式和背景色
在drawable目录下建shape 文件设置属性
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#ffffffff"/>
<!-- 通过此属性描边 -->
<strokeandroid:width="3dp"android:color="#ff669900"/>
<!-- 通过此属性描设置角度-->
<corners android:radius="8dp"/>
<!-- 通过此属性设置内边距 -->
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp"/>
</shape>
在drawable目录下建selector文件设置属性
设置点击前和点击后的不同样式
<selectorxmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/editor_shape_01" android:state_focused="true"></item>
<item android:drawable="@drawable/editor_shape_02"></item>
</selector>
b)AutoCompleteTextView (自动完成编辑框)
使用需要构建new ArrayAdapter 适配器来显示提示的的数据。
//设置何时出现提示字符(1表示输入一个字符时,默认是两个字符)
应用方法 ato.setThreshold(1);
c)SearchView(查询框,内置了一个AutoCompleteText)
应用监听事件
setOnQueryTextListener(this)
使用SearchView显示提示信息需在下面添加listview来显示
// 设置searchView的背景
// 获得searchView中的资源id(假如想获得官方布局的Id
// 时,但又不能直接方法,可以采取此方式)
Int resId= getResources().getIdentifier("android:id/search_plate", null, getPackageName());
// 根据id找到对应的子元素,并设置背景
LinearLayoutlayout=(LinearLayout)searchView.findViewById(resI)
layout.setBackgroundResource(R.drawable.editor_selector_01)
// 展开searchView
searchView.onActionViewExpanded();
// 添加监听器
searchView.setOnQueryTextListener(this);
/** 提交查询操作时执行此方法 */
@Override
public boolean onQueryTextSubmit(String query)
Log.i("TAG", "onQueryTextSubmit.query=" + query);
return false;
/** 文本内容发生变化时自动执行 */
@Override
public boolean onQueryTextChange(String newText)
Log.i("TAG", "onQueryTextChange.newText=" + newText);
adapter.getFilter()// 获得过滤器
.filter(newText);// 过滤listview中要显示的内容
return false;
3)Bars(条)
a)ProgressBar (进度条)
style="?android:attr/progressBarStyleLarge" 设置默认样式
b)SeekBar(拖动条)
Thumbs 设置颜色
应用添加事件 seekBar.setOnSeekBarChangeListener(this);
@Override
有变化就会执行
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
Log.i("TAG", "onProgressChanged.progress="+progress);
@Override
点击时执行
public void onStartTrackingTouch(SeekBar seekBar)
Log.i("TAG", "onStartTrackingTouch.progress="+seekBar.getProgress());
@Override
抬起时执行
public void onStopTrackingTouch(SeekBar seekBar)
Log.i("TAG", "onStopTrackingTouch.progress="+seekBar.getProgress());
设置点击抬起时的不同样式
<selectorxmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/seekbar_shape_02" android:state_pressed="true"/>
<item android:drawable="@drawable/seekbar_shape_01"/>
</selector>
<shapexmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">设置为圆形样式
<solid android:color="#88669900"/>
<stroke android:width="2dp" android:color="#ffff0000"/>
<size android:width="8dp" android:height="10dp"/>
</shape>
c)RatingBar(评价条)
应用点击事件 rBar.setOnRatingBarChangeListener(this)
<!-- 评价条 -->
<RatingBar
android:numStars="6" 有几个
android:stepSize="0.5"/> 每次点击增加多少
Input Controls FAQ?
1.Input Controls 组件的选择器如何设置?
1)background
2)textColor
3)thumbs (seekbar)
4).....
选择器的定义及访问
1)res/drawable/selector.xml
2)R.drawable.selector
在Selector中可以引入一些shape(图形)文件
1)res/drawable/shape.xml
2)R.drawable.shape
2.UI Controls 的事件处理?
1)软键盘事件
2)onChange,.....
Input Events (输入事件)
1.事件类型
1)onClick
2)onTouch
3)onChecked
4)onChange
5)onKey
6)......
2.事件传递机制(分发机制)
事件本身会存在一种传递机制,假如一个组件
上添加了多个事件,此事件会按照一定的顺序
依次处理(由分发机制决定),一般会先执行
onTouch事件,此事件是借助
dispatchTouchEvent方法的分发机制实现的。
3.事件冒泡机制
当android中的内层layout,外层layout对象
都添加了触摸事件时,当我们触摸内层容器
内层容器默认会将此事件传递到外层容器,
除非内层容器对事件进行了消费处理。
UI Components 是什么?
1)是一些用于呈现view的一些组件
2)方便与用户进行更好的交互。
2.UI Components 的常用类型?
1)Menu (菜单)
2)ActionBar(动作栏)
3)Dialog(对话框)
4)Notification(通知)
5)Toast(通知)
6)Setting(设置,先不讲)
--------------------------------------
Menu (菜单)
1.选项菜单(Option Menu)
a)创建(重写onCreateOptionsMenu)
b)监听(重写onOptionsItemSelected)
item添加方式:
1)getMenuInflater().inflat(R.menu.main, menu);//采用xml方式添加item
2)menu.add(0, 300, 106, "item06");// 采用Java代码方式添加item
相关方法:
1)setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
2)getActionView()// 获得某个item中ActionView
2.上下文菜单(Context Menu)
a)注册(registerForContextMenu)
b)创建(onCreateContextMenu)
c)监听(onContextItemSelected)
3.弹出式菜单(PopuMenu):3.0api
1)创建(new PopuMenu(...))
2)监听(setOnMenuItemClickListener)
3)显示(show())
4.子菜单(以上每种菜单都有子菜单)
a)创建(重写onCreateOptionsMenu)
b)监听(重写onOptionsItemSelected)
item添加方式:
1)getMenuInflater().inflate(R.menu.main, menu);//采用xml方式添加item
2)menu.addSubMenu(1, 300, 500, "ItemB");// 采用Java代码方式添加item
--------------------------------------
ActionBar (动作栏)
1.ActionBar 是什么?
ActionBar 是android3.0推出的一个新的对象,此对象最主要的目的是在标题栏更好的为用户
呈现一些view组件,并实现与用户的交互,例如可以呈现Menu对象。
2.ActionBar 对象的应用?
1)获得ActionBar
a)getActionBar():前提是主题中需要包含actionBar
2)操作ActionBar
a)hide()
b)show()
c)setXXXX
3)修改ActionBar主题
a)在style.xml中定义主题
<style name="MyCustomTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBarStyle</item>
</style>
<style name="MyActionBarStyle" parent=" @android:style/Widget.Holo.Light.ActionBar.Solid">
<item name="android:background">@drawable/actionbar_background_01</item>
<item name="android:displayOptions">useLogo</item>
</style>
b)在activity中引入主题
4)相关方法
a)setDisplayHomeAsUpEnabled(true);// 设置显示action向左的箭头
b)setHomeButtonEnabled(true); //设置home button可点击
c)setDisplayShowTitleEnabled(false);// 隐藏标题
d)setDisplayShowHomeEnabled(false);//隐藏home图标
e)setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//设置actionBar的导航模式
f)addTab(ab.newTab().setText("Tab01").setTabListener(this));//添加tab导航
g)setLogo(R.drawable.home_left_coach);// 使用自己的logo
h)setDisplayUseLogoEnabled(true);
i)setDisplayShowCustomEnabled(true);// 设置actionBar显示自定义view
j)View.inflate(this, R.layout.title_item_1, null);//设置actionBar的自定义view
K)setCustomView(view,new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER));
----------------------------------------------------
对话框(Dialog)
1.Dialog 是什么?
1)Android 中的一个UI组件
2)Android 中的一个浮动窗口
2.Dialog 应用场合?
1)以浮动窗口形式呈现UI
2)以浮动窗口形式与用户交互
3.Dialog 对象的应用实现?
1)AlertDialog (提示对话框)
a)构建AlertDialog
AlertDialog.Builder builder=
new AlertDialog.Builder(this);
b)相关方法:
1)setIcon(R.drawable.ic_launcher);
2)setSingleChoiceItems(items, checkedItem, listener);
3)setMultiChoiceItems(items, checkedItems, listener);
4)setItems();
5)show();
6)create();
7)setTitle();
8)setMessage();
9)setPositiveButton("确定", null);
10)setNegativeButton("取消", null);
11)setNeutralButton("其它", null);
2)DatePickerDialog(日期对话框) (TimePickerDialog)
a)构建DatePickerDialog
new DatePickerDialog();
b)相关方法:
1)Calendar.getInstance();
2)get(Calendar.YEAR);
3)set(Calendar.YEAR, year); DateUtils.formatDateTime(MainActivity.this,
c.getTimeInMillis(),
DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_SHOW_WEEKDAY
| DateUtils.FORMAT_SHOW_YEAR
| DateUtils.FORMAT_ABBREV_MONTH
| DateUtils.FORMAT_ABBREV_WEEKDAY);
3)ProgressDialog(进度对话框)
扩展:对话框形式的activity(主要是通过修改activity的主题)
----------------------------------------------------
Notification (通知)
1.Notification 是什么?
1)手机状态栏显示的一个对象
2)用于呈现View的一个对象
2.Notification 应用场合?
Notification一般应用于Android的服务端(service),
可以在service端创建,并发送,然后显示在状态栏。
例如:
1)软件更新的通知
2)短信的通知
3)未接电话的通知
4)播放音乐的通知
5)新闻头条通知
6)......
3.Notification 对象的应用?
1)构建Notification对象(借助builder对象)
a)Notification
b)NotificationCompat(兼容版本)
c)Builder
2)发送Notification对象(借助NotificationManager对象)
a)NofitificationManager
a.1)notify(int id,Notification ntf)
a.2)cancel(int id)
3)操作Notification对象(事件处理通过PendingIntent)
a)PendingIntent
4)定义Notification布局
a)RemoteViews
a.1)setXXXX
----------------------------------------------------
Toast(通知)
1.Toast 是什么?
1)Android 中的一个消息
2)用于呈现具体view信息
2.Toast 应用场合?
1)给出一个正确提示
2)给出一个错误提示
3.Toast 对象的应用?
1)创建
a)构造方法
b)静态方式(makeText)
2)设置(setXXX)
3)显示(show)
UI Components的同异性:
共性:这些对象不是view,但都可以某种表现方式呈现view
特性:构建方式,表现形式,监听方式
以上是关于安卓中的UI的主要内容,如果未能解决你的问题,请参考以下文章