3.Android中的用户界面(Android interface)
来源:互联网 发布:windows还原更改要多久 编辑:程序博客网 时间:2024/06/13 09:15
- UI的理解
UI是由View和ViewGroup组件的
一般的View: 会在屏幕上显示一个效果, 它没有子View
ViewGroup: 控制子View/ViewGroup的布局(layout), 它本身并不能显示什么效果
UI相关API结构
常用的UI组件
TextView : 文本视图
TextView
id=”@+id/xxx”
layout_width=”fill_Parent/wrap_Content/100dp”
layout_height=”fill_Parent/wrap_Content/100dp”
text=”显示的内容”
textColor=”#ff0000”
textSize=”20sp”
background=”背景颜色”
gravity=”left/rigth/center/top/bottom”>
EditText : 输入框
EditText
hint=”提示”
inputType=”phone”
maxLines=”最大行数”>
Button : 按钮
Button
ImageVIew : 图片视图
ImageView
backaground=”@android:drawable/xxxx” //引用系统的图片
src=”@drawable/xxxx” //引用自己的图片
imageView.setBackgroudResource(android.R.drawable.yyy) //设置背景图片
imageView.setImageResource(R.drawable.yyy) //设置前景图片
CheckBox : 多先框
CheckBox
checked=”true”
checkBox.setCheckedChangeListener(listener);//设置选中状态改变的监听
RadioButton/RadioGroup : 单选框
RadioGroup
oritation=”horizental”
RadioButton
checked=”true”
radioGroup.setCheckedChangeListener(listener);//设置选中状态改变的监听
Menu : 菜单
分类: OptionMenu, ContextMenu
显示方式: 纯java代码(menu), 菜单文件+MenuInflater
如何显示:
OptionMenu : onCreateOptionMenu(Menu menu)
ContextMenu:
view.setOnCreateContextMenuListener(this)
onCreateContextMenu(Menu menu)
选择某个item时的响应
OptionMenu : onOptionItemSelected(MenuItem item)
ContextMenu: onContextItemSelected(MenuItem item)
ProgressBar : 进度条
分类: 圆形的进度, 水平的
ProgressBar
style=”” //指定样式
progress=”20” //指定进度, 默认为0
max=”200” //指定进度的最大值, 默认是100
setProgress(progress)
getProgress()
setMax(max)
getMax()
SeekBar : 可滑动进度条
SeekBar: 可以手动设置进度
setOnSeekBarChangeListener(listener)
onStartTrackingTouch() : 按下
onStopTrackingTouch() : 离开
onProgressChanged(): 滑动变化Dialog : 对话框
AlertDialog
基本的
带单选列表
自定义显示View的
new AlertDialog.Builder()
.setTitle(title)
.setMessage(message)
.setSingleChoiceItems(String[] items, int itemIndex, Listener)
.setView(view)
.setPositiveButton(String text, listener)
.setNegativeButton(String text, listener)
.show();dialog.dismiss(); ProgressDialog : 带进度条的对话框 圆形的: ProgressDialog.show(context, title, message); 水平进度的 ProgressDialog dialog = new ProgressDialog(context); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZENTAL); dialog.show();
- 常用的UI布局
LinearLayout: 线性布局
1). 方向(oritation): 水平和垂直
2). 权重(weight)
=0(默认), 指定多大占用多大0, 剩余多大就占用多大, 如果多个的权重相同就平均分配
RetiveLayout: 相对布局
1). 一个视图默认是从左顶点开始布局的
2). 与兄弟之间的
a. 同方向对齐 align_xxx (left/top/right/bottom) @id/id值
b. 反方向对齐 toLeftOf / toRight / above / below @id/id值
3). 与父亲之间的
同方向对齐 align_parent_xxx(left/top/right/bottom) true/false
居中: cent_xxx
FrameLayout: 帧布局
TableLayout: 表格式布局 常用的视图配置的属性
id
layout_width
layout_hight
background=”颜色/图片”
src=”前景图片”
textSize
text
textColor
hint
inputtype
maxLines
layout_grarity: 控制自己在父亲中的位置
grarity: 控制孩子在自己中的位置
内边距
padding 10dp
padding_xxx(left/top/right/bottom) 10dp
外边距
margin 10dp
margin_xxx(left/top/right/bottom) 10dp同方向对齐 align_xxx (left/top/right/bottom) @id/id值
反方向对齐 toLeftOf / toRight / above / below @id/id值
同父亲方向对齐 align_parent_xxx(left/top/right/bottom) true/false
在父亲居中: cent_xxx- ListView的使用
ListView
listView.setAdapter(adapter);
listView.setOnItemClick(listener); //position
listView.setOnItemLongClick(listener); //position
Adapter
ArrayAdapter(context, layout, data)
SimplAdapter(context, layout, data, from, to)
List”Map”String, Object”” data //保存要显示的数据
String[] from //保存map中key
int[] to //保存view的id
BaseAdapter
int getCount() //返回data中数据的个数
Object getItem(int position) //返回data中position对应的某项数据
View getView(int position, View itemView) //返回Position所对应的某项view - 得到view对象
1). 利用复用的itemView
2). 动态加载view View.inflate(layout) - 得到对应的数据
Object obj = data.get(postion); - 设置数据
1). 找到子视图: itemView.findViewById(id)
2). 取出数据设置进去 应用练习
功能描述:
1). 以列表的形式显示手机内安装的所有应用的程序信息(应用图标和应用名称)
2). 点击某一项显示应用的名称- 技术点:
1). 得到手机内安装的所有应用的程序应用图标和应用名称信息的集合(暂时不需要)
2). 使用ListView和BaseAdapter显示列表
3). 使用相对布局设计Item的布局
4). 给每行添加点击事件, 显示应用的名称
测试代码:
主代码
package com.meng.app_graphic;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.animation.ScaleAnimation;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import com.meng.app_bean.AppInfo;public class MainActivity extends Activity implements OnItemClickListener, OnScrollListener{ private List<AppInfo> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView view = (ListView)findViewById(R.id.list_View_apps); MyAdapter adapter = new MyAdapter(); data = getAllAppInfos(); view.setAdapter(adapter); view.setOnItemClickListener(this); view.setOnScrollListener(this); } protected List<AppInfo> getAllAppInfos() { List<AppInfo> list = new ArrayList<AppInfo>(); //得到应用的packgeManager PackageManager packageManager = getPackageManager(); //创建一个主界面的intent Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); //得到包含应用信息的列表 List<ResolveInfo> ResolveInfos = packageManager.queryIntentActivities(intent, 0); //遍历 for (ResolveInfo ri : ResolveInfos) { //得到包名 String packageName = ri.activityInfo.packageName; //得到图标 Drawable icon = ri.loadIcon(packageManager); //得到应用名称 String appName = ri.loadLabel(packageManager).toString(); //封装应用信息对象 AppInfo appInfo = new AppInfo(icon, appName, packageName); //添加到list list.add(appInfo); } return list; } class MyAdapter extends BaseAdapter{ @Override public int getCount() { return data.size(); } @Override public AppInfo getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null){ convertView = View.inflate(MainActivity.this , R.layout.app_iteam, null); } AppInfo app = data.get(position); ((ImageView)convertView.findViewById(R.id.tv_iteam_icon)).setImageDrawable(app.getIcon()); ((TextView)convertView.findViewById(R.id.tv_iteam_appname)).setText(app.getAppName()); return convertView; } }//AppInfo代码package com.meng.app_bean;import android.graphics.drawable.Drawable;public class AppInfo { private Drawable icon; private String appName; private String packageName; public AppInfo() { super(); } public AppInfo(Drawable icon, String appName, String packageName) { super(); this.icon = icon; this.appName = appName; this.packageName = packageName; } public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } @Override public String toString() { return "AppInfo [icon=" + icon + ", appName=" + appName + ", packageName=" + packageName + "]"; }}
//XML配置文件代码
// Activity_main
<”LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >
<TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="应用列表" android:textSize="25sp" android:background="#aaffee" android:gravity="center"/><ListView android:id="@+id/list_View_apps" android:layout_width="match_parent" android:layout_height="wrap_content" ></ListView>
<”/’LinearLayout>
//_________________________________
//app_iteam
<”?xml version=”1.0” encoding=”utf-8”?>
<”LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”horizontal”
android:layout_gravity=”center_vertical”>
<ImageView android:id="@+id/tv_iteam_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /><TextView android:id="@+id/tv_iteam_appname" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="TextView" android:gravity="center"/>
<”/LinearLayout>
//<”应该写为:<
“`
- 3.Android中的用户界面(Android interface)
- Android 用户界面(User Interface)概要
- Android 用户界面(User Interface)概要
- User Interface(用户界面)
- android用户界面
- android用户界面
- android用户界面
- Android用户界面
- Android用户界面---对话框(dialogs)
- Android用户界面---对话框(dialogs)
- Android用户界面(一):概览
- Android用户界面(二):布局
- Android应用程序用户界面(一)
- Android应用程序用户界面(二)
- Android应用程序用户界面(三)
- Android应用程序用户界面(四)
- Android应用程序用户界面(五)
- Android应用程序用户界面(六)
- Java线程池学习
- ASP.NET MVC显示UserControl控件(扩展篇)
- ios-day21-01(对URL中的中文或特殊字符添加百分号转义、把经过百分号转义的URL还原)
- 字符串Hash
- ASP.NET MVC加载ASCX之后,并为之赋值
- 3.Android中的用户界面(Android interface)
- Android下的dropbear编译
- errpt 命令的使用
- Brown (black) film faced plywood / marine plywood
- 面试:机器学习--贝叶斯
- 快速排序
- ASP.NET MVC加载ASCX后并获取其内控件值或赋值
- hdoj 2817 A sequence of numbers(快速幂取模)
- Windows Phone Runtime 8.1 按返回键彻底关闭App -- 重新定义硬件返回键的事件