(四)Android中Context的理解与使用
2016-01-04 10:42
519 查看
一、Context的作用
Context可用于访问全局资源.public class MainActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
tv = new TextView(MainActivity.this); tv.setText("钱龙"); tv.setText(R.string.hello_world); tv.setText(getResources().getText(R.string.hello_world)); //访问全局资源 setContentView(tv);
ImageView iv=new ImageView(this); iv.setImageResource(R.mipmap.ic_launcher); //访问全局资源 setContentView(iv); } }
二、Application的用途
公共的布局文件:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存" android:id="@+id/btnSave" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
AndroidManifest.xml文件: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.shiyanshi.learncontext" > <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >? <activity android:name=".MainActivity" android:label="LearnContext" > <!--安装的应用程序的名称--> <intent-filter> <!--指定该activity为启动的activity--> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Main2Aty" android:label="Main2"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <!--必须指定为MAIN才会安装两个应用程序--> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
1.新建一个Application类,在其中设置需要被程序访问的公共资源,此处为一个字符串
public class App extends Application { private String stringData="default"; public void setStringData(String stringData) { this.stringData = stringData; } public String getStringData() { return stringData; } }
2.然后在AndroidManifest.xml文件中设置application的name属性为新建的类
<application android:name=".App">
3.新建一个Activity,并且使该Activity也成为一个启动Activity(即在系统中安装两个启动图标),注意要在AndroidManifest.xml文件中设置Activity的属性如上面的Main2Aty的设置,
注意过滤器中action的name必须设置为android.intent.action.MAIN且category的name必须设置为android.intent.category.LAUNCHER,只有这样系统中才会显示有两个启动图标。
public class Main2Aty extends Activity { private TextView textView; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_common); textView= (TextView) findViewById(R.id.textView); editText= (EditText) findViewById(R.id.editText); textView.setText(getApp().getStringData()); findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getApp().setStringData(editText.getText().toString()); textView.setText(getApp().getStringData()); } }); } App getApp() { return (App) getApplicationContext(); } }
4.主Activity
public class MainActivity extends Activity { private TextView textView; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common); textView= (TextView) findViewById(R.id.textView); editText= (EditText) findViewById(R.id.editText); textView.setText(getApp().getStringData()); findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getApp().setStringData(editText.getText().toString()); textView.setText(getApp().getStringData()); } }); } App getApp() { return (App) getApplicationContext(); }
}
5.注意3,4中是通过getApplicationContext()来获取自己新建的Application的子类的,然后再调用其中的方法就可以访问全局资源了。
三、Application的生命周期
Application的重载函数,有如下几个,onCreate在Activity的onCreate之前执行,并且每一个Activity执行之前都要执行Application的onCreate,因此可以很方便的在其中设置全局初始化信息。onTerminate,onLowMemory,onTrimMemory一般不会被执行。
@Override public void onCreate() { super.onCreate(); System.out.println("App onCreate"); } @Override public void onTerminate() { super.onTerminate(); } @Override public void onLowMemory() { super.onLowMemory(); } @Override public void onTrimMemory(int level) { super.onTrimMemory(level); }
相关文章推荐
- 2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
- Android图标规范
- Android中选择器selector的使用
- 写个android代码封装jar包然后代码混淆的笔记
- 学习android的建议(牛人-邓凡平)
- Android编程实现自动检测版本及自动升级的方法
- Android中 int 和 String 互相转换的多种方法
- activity之间的传值与回传
- Android px,dp,pt,sp的区别
- Matrix 详解
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- 浅谈Android动画一角
- Android使用service的bind方式使用服务的使用需要注意的一个问题
- Android编程开发音乐播放器实例
- 10个Android开源个性化View控件
- Android Fragment 真正的完全解析(下)
- android popupwindow底部弹出
- Android退出应用最优雅的方式(改进版)
- Android Fragment 真正的完全解析(上)
- Android内存优化杂谈