资源:放在res目录。

大纲:

  1. 字符串
  2. 颜色
  3. 尺寸
  4. 布局
  5. 数组
  6. 图像:drawable、mipmap
  7. 主题和样式
  8. 菜单:选项菜单、上下文菜单
  9. Android程序国际化

一、字符串资源

  1. 定义字符串资源文件,“用<string>来定义”
  2. 使用字符串资源:在XML文件中或在Java文件中
定义:特别注意是小写的!!!
 <string name="app_name">Demo</string>
 app_name为字符串名称,Demo为字符串即显示文字。

XML中使用:
android:text="@string/motto" 
@string/字符串名称

在Java中使用,也称动态设置:
textView.setText(getResources().getString(R.string.motto));
或textView.setText(R.string.motto)
或String s = getResources().getString(R.string.hello);
只有对字符串赋值时,需要使用getResources();一般方法中字符串作为参数的话,直接使用R.string.xxx的格式就可以了。

实例:实现一个Windows Phone风格的方格子界面,通过字符串资源设置文字

效果:

Android 将字符串中字符替换 android定义字符串_字符串


代码太简单了就不写了。

二、颜色资源

颜色值的定义:
#+透明度+R+G+B
若不指定透明度,则为完全不透明。

  1. 定义颜色资源文件。‘用<color>定义’
  2. 使用颜色资源。XML/JAVA
在XML中使用:
android:textColor="@color/title" 

在Java中使用:
textView.setTextColor(getResources().getColor(R.color.title));

三、尺寸资源

dp:设备独立像素,用于设置边距和组件大小
sp:可伸缩哦像素,用于设置字体大小。

定义尺寸资源文件:<dimen>

在XML中使用:
android:textSize="@dimen/title" 

在Java中使用:
textView.setTextSize(getResources().getDimension(R.demen.title));

四、布局资源

在Java文件中使用:
setContentView(R.layout.activity_main);

在布局文件xml中使用:需要一个布局文件包含另一个布局文件。
<include layout="@layout/image"

五、数组资源

数组:具有相同数据类型的一组数据的集合。
android中支持使用数组,但不推荐在Java文件中定义数组,而是推荐使用数组资源文件进行定义。

定义数组资源文件:

<array>子元素,定义普通类型的数组,元素类型可为颜色、字符串、尺寸资源。
<integer-array>子元素,元素为整数,可为各个进制的整数。
<string-array>子元素,元素为字符串。

创建一个array.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="listitem">
        <item>可爱</item>
        <item>嘻嘻</item>
        <item>啦啦</item>
    </string-array>
</resources>

在XML文件中使用:
<ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/listitem"
        android:id="@+id/listview"></ListView>

在Java文件中使用:
String[] arr=getResources().getStringArray(R.array.listitem);

六、Drawable资源

两大类:

  1. 图片资源
  2. StateListDrawable资源,状态列表资源。

注:android中图片资源不可有大写字母,且不能以数字开头!
.9.png图片制作:
1、androidsdk→tools→draw9patch。
设置可缩放区域
2、在AS中右击图片选择Create 0-patch file。

七、StateListDrawable资源(状态列表资源)

StateListDrawable为定义在XML文件中的Drawable对象,实现不同状态呈现不同图像。

定义StateListDrawable资源文件:Drawable右击→New→Drawable resource xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:color="#f60"></item>
    <item android:state_focused="false" android:color="#0a0"></item>
</selector>

XML中使用:点击时(获得焦点)橙色,否则绿色。
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="卡哇伊"
        android:textColor="@drawable/edittext_focused"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@drawable/edittext_focused"
        android:text="可爱"
        />

实例:模拟登陆微信页面,要求使用9-patch图片作为按钮的背景,并让按钮背景随状态变化而改变。

效果:(懒得P登录二字上去啦!)

Android 将字符串中字符替换 android定义字符串_xml_02


Android 将字符串中字符替换 android定义字符串_Android 将字符串中字符替换_03

创建StateListDrawable资源文件:button_enabled.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:drawable="@drawable/green2"/>
    <item android:state_enabled="false" android:drawable="@drawable/green1"/>
</selector>

activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/wechat"
    tools:context="com.example.asus.demo.MainActivity">

    <TextView
        android:layout_width="370dp"
        android:layout_height="wrap_content"
        android:text="2920292029"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="130dp"/>

    <EditText
        android:id="@+id/edittext"
        android:layout_width="370dp"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:inputType="textPassword"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="170dp"
        />
    <Button
        android:id="@+id/button"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp"
        android:background="@drawable/button_enabled"
        android:enabled="false"
        android:layout_gravity="center_horizontal"/>
</RelativeLayout>

MainActivity.java文件

package com.example.asus.demo;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button= (Button) findViewById(R.id.button);
        final EditText editText= (EditText) findViewById(R.id.edittext);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if(editText.length()>0)
                {
                    button.setEnabled(true);
                }
                else
                {
                    button.setEnabled(false);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }
}

八、mipmap资源

mipmap一般放应用图标,可以提高图片渲染速度和质量。

mipmap和drawable的区别
mipmap存放应用程序启动图标
drawable存放背景、作为修饰等文件。
即除了启动图标,基本上都放在drawable中。

九、主题资源

用于窗口的主题样式。
除了使用Android提高的主题,还可自定义主题资源。

定义主题资源文件在res→values→styles中进行定义,用style进行定义。

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>
    <!-- 自定义主题资源,样式继承自AppTheme。特别注意name和parent中间要有空格,否则报错。-->
    <style name="bgTheme" parent="@style/AppTheme">
        <item name="android:windowNoTitle"></item>
        <item name="android:windowBackground">@drawable/t4</item>
    </style>
</resources>

主题资源的使用:

在manifest.xml文件中使用:
android:theme="@style/bgTheme"

在Java文件中使用:
setTheme(R.style.bgTheme);
特别注意:在java中设置,要在setContentview之前使用,否则将不起作用。

九、样式资源

样式也用style来定义。
主题和样式两者的区别:

  1. 主题:设置整个app或窗口样式
  2. 样式:设置组件的样式

样式资源的定义,在res→values→styles中进行定义,用style进行定义。

<!-- 设置文字大小和颜色,用两个Item标记,name为修改属性,两个Item中间为属性值-->
    <style name="title">
        <item name="android:textSize">30sp</item>
        <item name="android:textColor">#06F</item>
    </style>

    <style name="content" parent="title">
        <item name="android:textSize">18sp</item>
    </style>

Style可继承,方便更改。如上例,更改颜色时,只需更改一个。

实例:模拟今日头条的新闻页面,实现使用样式资源设置新闻内容的样式。

效果:

Android 将字符串中字符替换 android定义字符串_android_04


style.xml文件

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="black">
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@color/black</item>
    </style>

    <style name="black_center" parent="black">
        <item name="android:layout_gravity">center_horizontal</item>

    </style>
</resources>

activtity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.asus.demo5.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="3月起明令禁止网络暴力人肉搜索等违法活动"
        android:layout_margin="5dp"
        style="@style/black"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="3月1日起,《网络信息内容生态治理规定》开始实行。规定明确,网络信息内容服务使用者和生产者、平台,不得开展网络暴力、人肉搜索、深度伪造、流量造假、操纵账号等违法活动。"
        android:layout_margin="5dp"
        />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/tu1"
        android:layout_margin="5dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="新闻主播报道"
        style="@style/black_center"
        />
</LinearLayout>

十、菜单资源

常见菜单:选项菜单、上下文菜单。
菜单资源文件通常放在res中的menu中,android默认不创建menu目录,故自建:右击res→New→directory。
然后在右击menu→new→menu xml→取名字.xml。创建成功

定义菜单文件:title为显示文字。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="message" android:title="消息"></item>
    <item android:id="home" android:title="首页"></item>
    <item android:id="help" android:title="帮助"></item>
    <item android:id="feedback" android:title="我要反馈"></item>
</menu>

1、创建选项菜单

选项菜单:手机菜单键或小圆点弹出的菜单项。

菜单项的创建有两种方式:
1、通过R.menu创建
getMenuInflater().inflate(R.menu.main, menu);
2、通过menu直接添加
menu.add(Menu.NONE, ITEM_ID, 3, “设置字体样式”);
//参数的含义: 参数一 组别 如果不分组就用 Menu.NONE
//参数二:id :Android根据ID来确定不同的菜单
//参数三:顺序 菜单的显示顺序
//参数四: 菜单项的显示文本

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater =new MenuInflater(this);
        menuInflater.inflate(R.menu.menu, menu); //通过R.menu添加
        return super.onCreateOptionsMenu(menu);
    }

2、创建上下文菜单

即长按2s以上时弹出的菜单。

Android 将字符串中字符替换 android定义字符串_字符串_05


注册上下文菜单的方法: registerForContextMenu()

添加上下文菜单的方法:在OnContextCreate中,

MenuInflater inflater=new MenuInflater(this);

inflater.inflate(R.menu.menu, menu);

实例:长按朋友圈文字,弹出上下文菜单

效果:

Android 将字符串中字符替换 android定义字符串_xml_06


Android 将字符串中字符替换 android定义字符串_android_07


Android 将字符串中字符替换 android定义字符串_字符串_08


menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_copy" android:title="复制"></item>
    <item android:id="@+id/menu_collect" android:title="收藏"></item>
    <item android:id="@+id/menu_tran" android:title="翻译"></item>
    <item android:id="@+id/menu_report" android:title="举报"></item>
</menu>

MainActivity.java文件

package com.example.asus.demo;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
    private TextView introduce;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //为文本框注册上下文菜单
        introduce= (TextView) findViewById(R.id.text);
        registerForContextMenu(introduce);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflater=new MenuInflater(this);
        inflater.inflate(R.menu.menu, menu);
    }
    //重写onContextItemSelected()方法,指定各个菜单项被选择时,所应做的处理。

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId())
        {
            case R.id.menu_copy:
                Toast.makeText(MainActivity.this, "已复制", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_collect:
                Toast.makeText(MainActivity.this, "已收藏", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_tran:
                Toast.makeText(MainActivity.this, "已翻译", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_report:
                Toast.makeText(MainActivity.this, "已举报", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
}