【Android】从入门到中级 中

替代资源:

      如果程序需要为特定的设备配置提供替代的资源支持,如需要为不同屏幕提供代替的图片资源,为不同语言提供替代的字符串资源,运行时android会检查设备配置并为应用程序加载合适的资源;

步骤:

  • res/下创建新目录,<resource_name>_<config_qualifier>方式命名, resources_name 是上表中提到的任意资源,如布局、图片等。 qualifier 将确定个性的配置使用哪些资源。可以查看官方文档来了解不同类型资源的一个完整 qualifier 列表。
  • 目录中保存响应的替代资源,利用这些文件将确定的内容进行替代。虽然图片的文件名一样,但是高分辨率的屏幕,图片的分辨率也会高

访问资源

代码中访问

当 Android 应用程序被编译,生成一个 R 类,其中包含了所有 res/ 目录下资源的 ID。你可以使用 R 类,通过子类+资源名或者直接使用资源 ID 来访问资源

//访问 res/drawable/myimage.png,并将其设置到 ImageView 上

//用 R.id.myimageview 来在布局文件中获取定义为 myimageview 的 ImageView
ImageView imageView = (ImageView) findViewById(R.id.myimageview);

//用R.drawable.myimage 来获取在 res/ 的 drawable 子目录下名为 myimage 的图片
imageView.setImageResource(R.drawable.myimage);

例子二:

// res/values/strings.xml 有如下定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string  name="hello">Hello, World!</string>
</resources>

//可在 ID 为 msg 的 TextView 对象上使用资源 ID 来设置文本:

TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

实例三:

   public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        //R.layout.main,就是在R.java中的R类定义的layout中main,格式为:R.layout.<layout的xml文件名字>,就是对应的res/layout/activity_main.xml文件。
        setContentView(R.activity_main.main);
        TextView myTextView = (TextView) findViewById(R.id.text);
        myTextView.setText("我的Activity");

        //@+id/button
        Button myButton = (Button) findViewById(R.id.button);
        myButton.setText("我的按钮");
    }

在xml中访问

<?xml version="1.0" encoding="utf-8"?>
<resources>
//颜色资源和一个字符串资源
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

//布局文件中使用这些资源来设置文本颜色和文本内容
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

Android获得activity

一个具有用户界面的单一屏幕:java窗口或帧

android活动是ContextThemeWrapper 类的子类

Android 系统初始化程序是通过活动中的 onCreate() 回调的调用开始的

存在有一序列的回调方法来启动一个活动,同时有一序列的方法来关闭活动

生命周期:

实例

在主要活动文件src/com.example.helloworld/MainActivity.java修改的内容,Log.d()方法用来生成日志信息,包含每一个基本的生命周期方法

package com.example.phoebem.myapplication;

import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends AppCompatActivity {
    String msg = "Android : ";
    /** 当活动第一次被创建时调用 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 从res/activity_main 中的XML文件加载所有的UI组件
        setContentView(R.layout.activity_main);
        Log.d(msg, "The onCreate() event");
    }
    /** 当活动即将可见时调用 */
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(msg, "The onStart() event");
    }
    /** 当活动可见时调用 */
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(msg, "The onResume() event");
    }
    /** 当其他活动获得焦点时调用 */
    @Override
    protected void onPause() {
        super.onPause();
        Log.d(msg, "The onPause() event");
    }
    /** 当活动不再可见时调用 */
    @Override
    protected void onStop() {
        super.onStop();
        Log.d(msg, "The onStop() event");
    }
    /** 当活动将被销毁时调用 */
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(msg, "The onDestroy() event");
    }


}

这个世界上厉害的人总是辣么多 辣么多

android服务service

服务是一个即使应用被销毁依然可以在后台运行的组件:执行长时间运行且不需要和用户交互的任务;

服务的状态:

started:程序组件如活动,通过starttService启动了服务,则服务是此状态,一旦启动,服务可无期限运行,即使启动它的组件已被销毁;

bound:  程序组件通过bindService绑定了服务,则是此状态;该状态的服务提供了一个客户服务器接口来容许组件与服务交互

http://www.runoob.com/android/android-services.html

//res/values/strings.xml 定义两个新的常量 哪里用到了???
<string name="menu_settings">Settings</string>
  <string name="action_settings">Settings</string>

android广播接收器broadcast receivers

响应来自其他应用或系统的广播消息(也称事件或意图),可定义适当动作来拦截这些通信

步骤:使系统广播意图配合广播接收器工作

创建

实现BroadcastReceiver类,重写onReceive来接收以Intent对象为参数的消息。

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

注册

在AndroidManifest.xml中注册广播接收器来监听制定的广播意图

     无论什么时候Android设备被启动,都将被广播接收器MyReceiver所拦截,并且在onReceive()中实现的逻辑将被执行。

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
//注册MyReceiver
   <receiver android:name="MyReceiver">
//监听系统产生的ACTION_BOOT_COMPLETED事件
      <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED">
         </action>
      </intent-filter>

   </receiver>
</application>

重要的系统事件:定义为类Intent中的静态常量值

事件常量 描述
android.intent.action.BATTERY_CHANGED 持久的广播,包含电池的充电状态,级别和其他信息。
android.intent.action.BATTERY_LOW 标识设备的低电量条件。
android.intent.action.BATTERY_OKAY 标识电池在电量低之后,现在已经好了。
android.intent.action.BOOT_COMPLETED 在系统完成启动后广播一次。
android.intent.action.BUG_REPORT 显示报告bug的活动。
android.intent.action.CALL 执行呼叫数据指定的某人。
android.intent.action.CALL_BUTTON 用户点击"呼叫"按钮打开拨号器或者其他拨号的合适界面。
android.intent.action.DATE_CHANGED 日期发生改变。
android.intent.action.REBOOT 设备重启。

广播自定义意图:

活动类中通过sendBroadcast()来创建并发送这些自定义意图

sendStickyBroadcast(Intent)持久的(sticky),发出的意图在广播完成后一直保持着

实例:创建广播接收器来拦截自定义意图

     应用程序可以处理一个或多个自定义或者系统的意图,没有任何限制。每个你想拦截的意图都需要使用<receiver.../>标签在AndroidManifest.xml中注册

还需要继续学习

猜你喜欢

转载自blog.csdn.net/ma15732625261/article/details/81805383
今日推荐