Intent 的四个重要属性:Action、Data、Catagory、Extras
- Action:Action 属性的值为一个字符串,它代表了系统中已经定义的一系列常用的动作,通过setAction()方法或在清单文件AndroidManifest.xml中设置
- Data: Data 通常是URL格式定义的操作数据。例如:tel:// 通过setData()方法设置
- Category:Category 属性通常用于指定当前动作Action被执行的环境,通过addCategory() 设置
- Extras: Extras 属性主要用于传递目标组件所需要的额外的数据,通过putExtras()方法设置
Action 的使用方法
- 主Activity
package com.example.androidtest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
final static String LLP_ACTION = "com.example.action.LLP_ACTION";
final static String LLP_CATEGORY = "com.example.category.LLP_CATEGORY";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button send = (Button)findViewById(R.id.read);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction(MainActivity.LLP_ACTION);
intent.addCategory(MainActivity.LLP_CATEGORY);
startActivity(intent);
}
});
}
}
- 接收Activity 在 Androidanifest.xml中的配置
<activity android:name="com.example.androidtest.Receive">
<intent-filter >
<action android:name="com.example.action.LLP_ACTION"/>
<category android:name="com.example.category.LLP_CATEGORY"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Style 样式
-
Android 的样式资源放在 /res/valus 目录下,样式资源的根元素是resources…/元素,该元素内可以包含多个style…/元素,每个style…/元素定义一个样式,style…/元素指定如下两个属性:
- name:指定样式的名称
- parent:指定样式所继承的父样式,当继承某个父样式时,该样式将会获得父样式汇总完全的全部格式。当然,当前样式也可以覆盖父样式中的中指定的格式。style…/元素内部可包含多个item…/元素,每个item…/元素定义一个格式项
-
xml 代码如下:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="style1">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#00d</item>
</style>
<style name="style2">
<item name="android:background">#ee6</item>
<item name="android:padding">8dp</item>
<item name="android:textColor">#000</item>
</style>
</resources>
<!-- 布局文件代码 -->
<!-- 指定使用style的代码 -->
<EditText
android:id="@+id/edit2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="second"
style="@style/style2"
/>
主题资源 Theme
- 主题资源theme和样式style的代码格式一样,可以用在同一个xml文件中
- 代码如下:
<style name="LlpTheme">
<!-- 设置没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 设置全屏 -->
<item name="android:windowFullscreen">true</item>
<!-- 设置边框,window_boder 文件放在 drawable 目录下 -->
<item name="android:windowFrame">@drawable/window_boder</item>
<!-- 设置背景 -->
<item name="android:windowBackground">@drawable/actionbar_camera_icon</item>
</style>
- window_boder 文件,位于drawable目录下
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 设置填充颜色 -->
<solid android:color="#0fff" />
<!-- 设置四周的内边框 -->
<padding
android:bottom="7dp"
android:left="7dp"
android:right="7dp"
android:top="7dp" />
<!-- 设置边框 -->
<stroke
android:width="10dip"
android:color="#f00" />
</shape>
使用自定义的主题:
在AndroidManifest文件中的application中加入如下代码:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/LlpTheme" >
...
</application>
- 如果只想要对某一个Activity使用某个主题,则在AndroidManifest文件中Activity中设置
<!-- 使用自带的主题 -->
<activity android:theme="@android:style/Theme.Dialog">
...
</activity>
主题继承
- Android的主题同样支持继承,如果开发过程中还想利用某个主题,然后对它的局部进行修改,则可以通过继承系统主题来是实现自定义主题
<style name="LlpTheme" parent="@android:style/Theme.Dialog">
...
</style>
SharedPreferences 用法
SharedPreferences preferences;
SharedPreferences.Editor editor;
preferences = getSharedPreferences("example", MODE_PRIVATE);
editor = preferences.edit();
//获取数据
count = preferences.getInt("counter", 0);
//上传数据
editor.putInt("counter", ++count);
editor.putInt("date_mounth", date_mounth);
editor.commit();
Android MySql 用法
SQLiteDatabase db;
//新建数据库
db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+ "/llp.db3", null);
try
{
insertData(db, "月份:" + date_mounth, "使用短信数量: " + 0 + " 条");
}
catch (SQLiteException se)
{
// 执行DDL创建数据表
db.execSQL("create table news_inf(_id integer primary key autoincrement,"
+ " news_title varchar(50),"
+ " news_content varchar(255))");
// 执行insert语句插入数据
insertData(db, "月份:" + date_mounth, "使用短信数量: " + 0 + " 条");
}
private void insertData(SQLiteDatabase db, String get_mounth,String get_counter)
{
// 执行插入语句
db.execSQL("insert into news_inf values(null , ? , ?)", new String[] {get_mounth, get_counter });
}
private void updateData(SQLiteDatabase db, String get_mounth,String get_counter)
{
ContentValues values = new ContentValues();
int result = db.update("news_inf", values, "news_title=?",new String[] { get_mounth });
}
//复写onDestory函数关掉数据库
@Override
public void onDestroy()
{
super.onDestroy();
if (db != null && db.isOpen())
{
db.close();
}
}
Android 短信监听
// 监听发送的短信
private final class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler) {
super(handler);
}
//检测到短信就回调用onChange 函数
public void onChange(boolean selfChange)
{
ContentResolver resolver = getContentResolver();
// 查到发出的短信,
Uri uri = Uri.parse("content://sms/outbox");
Cursor cursor = resolver.query(uri, new String[] { "date",
"address", "body" }, null, null, "_id desc limit 1");
flag = flag_new;
flag_new = cursor.moveToNext();
boolean te1 = fg;
// 如果上升沿检测到有短信发出
fg = ((!flag) && (flag_new));
boolean te2 = fg;
fg_more = (!te1) && (te2);
}
}
Android 应用程序优先级
- 一个应用程序的优先级等同于它优先级最高的组件的优先级
当两个应用程序有相同的优先级时,处于较低优先级且运行时间最长的进程将会首先被终止 - 进程的优先级也收到进程间依赖性的影响,如果一个应用程序yi8lai与第二个应用程序所提供的服务或者内容提供者,那么第二个应用程序至少会拥有与它所支持的这个应用程序相同的优先级
Android R.java 文件介绍
- R.java 文件中默认有attr、drawable、layout、string等色哥静态内部类,每个静态内部类分别对应着一种资源,如layout静态内部类对应着layout中的接界面文件,其中每个静态内部类中的静态常量分别定义为一条资源标识符,如下:
//下面对应着的是layout目录下的main.xml文件
public static final int main = 0x7f030000;
- 资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现[a-z0-9_] 这些字符,否则R.java文件不会自动更新,并且eclipse会提示错误
- 当开发者在res/目录中任何一个子目录中添加相应类型的文件之后,ADT会在R.java文件中相应内部类中自动生成一条静态int类型的常量,对添加的文件进行索引
- 如果在layout目录下添加一个新界面,那么在public static final class layout 中也会添加相应的静态int常量
- 相反,我们再res目录下删除任何一个文件,其在R.java文件中对应的记录会被ADT自动删除
- R.java文件除了自动标示资源的索引功能外,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的apk包中,节省资源
通过 R.java 文件来引用到所需要的资源
- 在 java 程序中应用资源
- 在java程序中应用资源
- 按照java的语法来引用即 R.resource_type.resource_name
- 注意:resource_name 不需要文件的后缀名
- Android系统本身自带了很多资源可以引用,只是需要在前面加上 Android. 以申明来自Android系统,即Android.R.resource_type.resource_name
- 在xml文件中引用资源
- 在xml文件中一般是通过@drawable/icon的方式获取的,其中@代表R.java类,drawable代表的是R.java中的静态内部类drawable,/icon代表静态内部类drawable中的静态属性icon
- 如果访问的是Android系统自带的文件,则要添加Android:,如下:
- 在布局文件中当我们需要为一些组件添加Id属性作为标识@+id/string_name,其中“+”表示在R.java的名为Id的内部类中添加一条常量名为string_name的记录
- 在java程序中应用资源
android:textColor="@android:color/red"