android基础08

1.Notification(状态栏通知)
1.获取通知管理器
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2.新建一个通知,指定其图标和标题
Notification notification = new Notification(icon, null, when); 第一个参数为图标的id,第二个参数为短暂提示标题,第三个为通知时间
3.设置状态栏通知时发出的声音
notification.sound= Uri.fromFile(new File("/sdcard/haha.mp3"));
4.设置状态栏通知,不能被清除
    notification.flags = Notification.FLAG_NO_CLEAR;
5.定义一个延期的意图,用于点击消息时,才去开启这个activity
Intent openintent = new Intent(this, OtherActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0); 当点击消息时就会向系统发送openintent意图
6.定义notification的详细信息,并把要开启的延期的意图传递进来
notification.setLatestEventInfo(this, “标题”, “我是内容", contentIntent);
7.激活activity
mNotificationManager.notify(0, notification); 第一个参数为自定义的通知唯一标识,用不到

2.创建一个对话框
1.获取一个对话框的创建器
AlertDialog.Builder builder = new Builder(context);
2.设置参数
builder.setTitle("对话框标题");
builder.setMessage("提示是否退出");
3.创建对话框并显示出来
Dialog dialog = builder.create();
dialog.show();

3.builder.setItems(arr,listener); 设置单选对话框
  builder.setSingleChoiceItems(arr,listener); 设置带单选按钮的单选对话框
  builder.setMultiChoiceItems(arr,boolean[]{},listener); 设置带多选列表的多选对话框
  ProgressDialog pd = new ProgressDialog(this); 设置进度条对话框

4.单选框(RadioButton)
需要使用到RadioGroup和RadioButton(单选框),RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框能被选中
1.RadioGroup.check(R.id.dotNet);将id名为dotNet的单选框设置成选中状态。
2.(RadioButton) findViewById(radioGroup.getCheckedRadioButtonId());//获取被选中的单选框。
3.RadioButton.getText();//获取单选框的值
4.调用setOnCheckedChangeListener()方法,处理单选框被选择事件,把RadioGroup.OnCheckedChangeListener实例作为参数传入

5.多选框(CheckBox)
每个多选框都是独立的,可以通过迭代所有多选框,然后根据其状态是否被选中再获取其值。
1.CheckBox.setChecked(true);//设置成选中状态。
2.CheckBox.getText();//获取多选框的值
3.调用setOnCheckedChangeListener()方法,处理多选框被选择事件,把CompoundButton.OnCheckedChangeListener实例作为参数传入

6.进度对话框(ProgressDialog)
1.使用代码ProgressDialog.show(ProgressDialogActivity.this, "请稍等", "数据正在加载中...", true);创建并显示一个进度对话框。
2.调用setProgressStyle()方法设置进度对话框风格。有两种风格:
1.ProgressDialog.STYLE_SPINNER 旋体进度条风格 (为默认风格)
2.ProgressDialog.STYLE_HORIZONTAL 横向进度条风格

7.下拉列表框(Spinner),默认会选中第一个选项
1.在布局文件中定义一个Spinner控件,
2.Spinner spinner = (Spinner) findViewById(R.id.spinner); 通过id定义一个spinner对象,
3.spinner.setAdapter(adapter); 必须给spinner设置数据适配器
4.定义数据适配器,并填充数据
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        adapter.add("java");
        adapter.add("dotNet");
        adapter.add("php");

8.拖动条(SeekBar)
1.SeekBar.getProgress()获取拖动条当前值
2.调用setOnSeekBarChangeListener()方法,处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入
3.SeekBar.setMax(100); 将拖动条的最大值设置为100

9.输入内容自动完成文本框(AutoCompleteTextView )
1.在布局文件中定义一个AutoCompleteTextView控件
2.String[] names = {"老张", "老方", "老毕", "李明" , "李丽", "陈江", "abc", "acc"};
3.AutoCompleteTextView nameText = (AutoCompleteTextView)this.findViewById(R.id.name);
4.ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, names); 定义一个数组数据适配器
5.nameText.setAdapter(adapter); 设置数据适配器

10.多次输入-内容自动完成文本框(MultiAutoCompleteTextView)
可以在输入框中多次 提示

11.手势识别
1.建立手势库
使用SDK自带例子GestureBuilder建立手势库,生成的手势库文件在SCDard上,默认文件名称为:gestures
2.在应用中加载手势库文件,然后开发手势识别代码。
把手势库文件gestures文件拷贝到项目的res/raw目录下。然后在布局文件中添加用于手势绘制的View:
<android.gesture.GestureOverlayView
android:id="@+id/gestures"
android:layout_width="fill_parent“ android:layout_height="0dip"
android:layout_weight="1.0" />

为View添加手势监听事件:gestureOverlayView.addOnGesturePerformedListener(); ·加载单笔手势识别监听事件
得到手势库:mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
加载手势库:mLibrary.load();
List<Prediction> predictions = mLibrary.recognize(gesture);//从手势库中查询匹配的内容,匹配的结果可能包括多个相似的内容,匹配度高的结果放在最前面

12.大多数情况下,手势都是通过一笔完成。然而有一些特别的需求就需要通过多个笔画来实现,
这时可以使用gestureStrokeType属性进行设置:android:gestureStrokeType="multiple"

13.国际化
1.在values和drawable文件夹后加上语言以及地区名,程序中需要国际化的部分使用资源ID
values-en-rUK
values-en-rUS
values-zh-rCN
values-zh-rTW
2.匹配规则
在匹配资源时先会找语言、地区完全匹配的
如果没有地区匹配的,则查找语言匹配的
如果没有语言匹配的则找默认values

14.屏幕适配
1.在layout文件夹后加上分辨率,系统会根据屏幕尺寸自动选择
注意分辨率中的乘号是“x”不是“*”
2.如果没有匹配的分辨率会找默认layout文件夹

15.采用代码编写ui
1.LinearLayout ll = new LinearLayout(this);
2.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,height);
3.ll.setLayoutParams(params);

16.样式
1.定义样式
设置样式,在values文件夹下的任意文件中的<resources>中配置<style>标签
<style name="style1">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
/style>
继承样式,在<style>标签中配置属性parent
<style name="style2" parent="@style/style1">
<item name="android:textColor">#FF0000</item>
</style>
继承样式,在name中引用其他样式
<style name="style2.style3">
<item name="android:textSize">30sp</item>
</style>
2.使用样式
在layout文件的标签中配置style属性
<Button 
style="@style/style2.style3"
    android:text="这是一个按钮"
/>

17.主题
定义过的样式也可以应用在<activity>和<application>标签中,使用theme属性尽心配置
<style name="theme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
</style>

<activity android:name=".MainActivity"
            android:label="@string/app_name"
android:theme="@style/theme"
>

18.使用网页开发软件界面 WebView
1.写一个布局文件,定义WebView控件
2.WebView webView = (WebView) findViewById(R.id.webView); 相当于定义了一个浏览器
3.WebSettings settings = webView.getSettings();
settings.setBuiltInZoomControls(true); 设置网页允许放大缩放显示
settings.setJavaScriptEnabled(true); 设置网页支持javascript
4.String url = getResources().getString(R.string.serverurl);
5.webView.loadUrl(url);

webView.loadUrl("javascript:javascript的函数"); 当执行这句的时候就会直接去执行这个javascript函数。

19.Tween动画,通过对 View 的内容进行一系列的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果。
动画效果的定义可以采用XML来做也可以采用编码来做。Tween动画有4种类型:
动画的类型 Xml定义动画使用的配置节点 编码定义动画使用的类
1.渐变透明度动画效果 <alpha/> AlphaAnimation
2.渐变尺寸缩放动画效果 <scale/> ScaleAnimation
3.画面位置移动动画效果 <translate/> TranslateAnimation
4.画面旋转动画效果 <rotate/> RotateAnimation

例子1:直接new出来一个AlphaAnimation
AlphaAnimation aa = new AlphaAnimation(0.5f,1.0f);
ImageView iv = (ImageView)findViewById(R.id.image1);
aa.setDuration(2000);
iv.startAnimation(aa);iv.startAnimation(aa);

例子2:建立一个alpha.xml文件,然后用AnimationUtils.loadAnimation(this.R.anim.alpha);
AlphaAnimation aa = AnimationUtils.loadAnimation(this.R.anim.alpha)
iv.startAnimation(aa);

例子3:多种动画组合
AlphaAnimation aa = AnimationUtils.loadAnimation(this.R.anim.alpha);
aa.setDuration(2000);
ScaleAnimation sa = AnimationUtils.loadAnimation(this.R.anim.scale);
sa.setDuration(2000);

AnimationSet set = new AnimationSet(false); 是否需要加时器,一般都是false
set.addAnimation(aa);
set.addAnimation(sa);

iv.startAnimation(set);

例子4:可以定义一个set.xml文件,把这四个动画节点都加入到set节点下

20.Frame动画,即顺序播放事先做好的图像,跟放胶片电影类似
1.把准备好的图片放进项目res/ drawable下。
2.在项目的res目录下创建文件夹anim,然后定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
3.为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。

例子:定义frame.xml文件
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/girl_1" android:duration="200" />
<item android:drawable="@drawable/girl_2" android:duration="200" />
<item android:drawable="@drawable/girl_3" android:duration="200" />
</animation-list>
上面的XML就定义了一个Frame动画,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:girl_1.gif, girl_2.gif, girl_3.gif,每帧动画持续200毫秒。android:oneshot属性如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。

例子:
ImageView iv = (ImageView)this.findViewById(R.id.iv); 布局文件中定义的imageview
iv.setBackgroundResource(R.anim.frame); imageview设置背景资源
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground(); 通过imageview获取它的背景动画图片
animationDrawable.start(); 开始播放这个动画

21.传感器参数
1.传感器类型
方向 Sensor.TYPE_ORIENTATION
重力 Sensor.TYPE_ACCELEROMETER
光线 Sensor.TYPE_LIGHT
磁场 Sensor.TYPE_MAGNETIC_FIELD
距离 Sensor.TYPE_PROXIMITY
温度 Sensor.TYPE_TEMPERATURE
2.传感器反应速度
SensorManager.SENSOR_DELAY_FASTEST
SensorManager.SENSOR_DELAY_GAME
SensorManager.SENSOR_DELAY_UI
SensorManager.SENSOR_DELAY_NORMAL

22.使用方向传感器
1.获得传感器管理器
SensorManager manager = (SensorManager) getSystemService(SENSOR_SERVICE);
2.获得方向传感器
Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
3.注册监听器
manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
4.监听器
private final class MySensorEventListener implements SensorEventListener {
public void onSensorChanged(SensorEvent event) {
System.out.println(event.values[0]);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
5.取消监听器
manager.unregisterListener(listener, sensor);

23.关闭应用
1.首先获取当前进程的id,然后杀死该进程。 缺点:不能把应用程序完全杀死,并且也不会把当前应用程序的activity的task栈清空掉
android.os.Process.killProcess(android.os.Process.myPid())
2.终止当前正在运行的Java虚拟机,导致程序终止。缺点:不会把自己的应用程序杀死
System.exit(0);
3.强制关闭与该包有关联的一切执行,需要在清单文件中注册权限。缺点:不能杀死自己,能完全杀死其它应用程序。
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);   
manager.restartPackage(getPackageName());
<uses-permission android:name="android.permission.RESTART_PACKAGES" />

以上三种在开发的时候都不常用,企业关闭应用的方法步骤如下:
1.定义一个App类继承Application类,
作用是创建出来整个应用程序的全局的实例。
2.重写Application的onCreate()方法,该方法在App类初始化的时候就会调用
3.定义 ArrayList<Activity> activities; 并在onCreate()方法里new 出来
4.在这个应用的每个activity的onCreate()方法里都写上
App app = (App)getApplication();
app.activities.add(this); 把当前的activity对象添加到集合里,
5.在onDestroy()方法里写上
App app = (App)getApplication();
app.activities.add(this); 把当前的activity对象从集合里删除,
6.定义一个menu菜单,当点击“完全退出”的时候
App app = (App)getApplication();
List<Activity> list = app.activities;
for(Activity activity:list){
activity.finish();
}

24.菜单(Menu)
1.重写Activity的onCreateOptionsMenu(Menu menu)方法,该方法用于创建选项菜单,在用户按下手机的“Menu”按钮时就会显示创建好的菜单,
在onCreateOptionsMenu(Menu menu)方法内部可以调用Menu.add()方法实现菜单的添加。或者定义一个menu.xml文件,并填充成menu对象
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
来实现menu菜单的添加
2.重写Activity的onOptionsItemSelected(MenuItem item)方法,该方法用于处理菜单被选择事件
3.通过手机上提供的“MENU”按钮可以打开菜单,如果希望通过代码打开菜单,可以调用Activity的openOptionsMenu()方法。

25.在应用中安装其他程序
1.加入权限 <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
2.程序中添加以下代码
intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 开启一个新的任务栈
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(filepath),"application/vnd.android.package-archive");
startActivity(intent);

猜你喜欢

转载自xpchou.iteye.com/blog/1629303
今日推荐