Android 开发(09)安卓的资源文件

一、字符串资源

定义

  • AS开发界面 res 文件夹下 values 目录 string xml 文件中定义字符串资源

使用

  • xml 中直接使用,前面用过很多次了
  • java代码中使用:getResources().getString(id)

二、颜色资源

  • java文件中获取颜色资源:getColor(id)

三、尺寸资源

  • 我的AS版本中创建应用不会自动创建dimens xml 文件,手动创建即可
  • java文件中获取尺寸资源:getResources().getDimension(id)

四、布局资源

  • 使用include标签在一个布局文件中引用另一个布局文件
  • 使用include标签的 layout 属性指定包含的布局文件
<TextView
	android:id="@+id/tv1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="手势测试!"
	app:layout_constraintBottom_toBottomOf="parent"
	app:layout_constraintLeft_toLeftOf="parent"
	app:layout_constraintRight_toRightOf="parent"
	app:layout_constraintTop_toTopOf="parent" />

<include
	layout="@layout/include_test"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	app:layout_constraintBottom_toBottomOf="parent"
	app:layout_constraintLeft_toLeftOf="parent"
	app:layout_constraintRight_toRightOf="parent"
	app:layout_constraintTop_toBottomOf="@+id/tv1" />

五、数组资源

三种array

  • :啥子类型我都是可以装的

数组示例

Android 开发(09)安卓的资源文件_第1张图片


六、图像资源

1、关于9patch图片

9patch图片有什么用

  • 普通的图片进行拉伸的时候出现图案的失真
  • 9patch图片在进行缩放拉伸的时候不会出现图像的失真
  • 9patch图不会失真的原因是我们制作9patch图的时候指定了图片哪些部分可以拉伸,哪些部分不能拉伸,这样就能够保证我们的图片在使用的时候不会失真
  • 9patch图和普通图片的不同在于四周会有黑线,这些黑线就是用来指定可以拉伸的区域的
  • 9patch图不能通过一般的修图软件进行制作,要使用专门的工具

9patch图片制作使用

  • 安卓SDK里面一般会有这么一个工具draw9patch,这个就是用来制作 9patch图片的
    Android 开发(09)安卓的资源文件_第2张图片
  • 工具的基本界面如上面的图所示,使用很简单,没啥可说
  • 制作好 9patch图直接复制到工程的目录中进行使用即可
  • 最后附一张使用9patch图和没有使用9patch图的效果
    Android 开发(09)安卓的资源文件_第3张图片

1.9patch图详细的说明参考:https://www.jianshu.com/p/3fd048644e3f
2.制作9patch图的软件不只这一个,ps好像也是可以用来做9patch的

2、StateListDrawable资源

  • 这个东西就是 drawable 文件夹下面的一个 xml 文件
  • StateListDrawable的作用就是根据组件的不同状态显示不同的样式

微信登录界面实现

  • 效果图
    Android 开发(09)安卓的资源文件_第4张图片
  • 布局文件
<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:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/head" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1008611"
        android:textSize="26sp" />

    <EditText
        android:id="@+id/et1"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:drawableLeft="@drawable/lock"
        android:drawableRight="@drawable/close"
        android:inputType="numberPassword" />

    <Button
        android:id="@+id/btn"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="@drawable/button_enabled"
        android:enabled="false"
        android:text="登录"
        android:textColor="#fff"
        android:textSize="24sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="忘记密码"
        android:textColor="#243599"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="登录遇到问题"
        android:textColor="#243599"
        android:textSize="20sp" />

LinearLayout>
  • activity文件
public class MainActivity extends AppCompatActivity {
    Button button;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.btn);
        editText = (EditText) findViewById(R.id.et1);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (editText.getText().length() > 0) {
                    button.setEnabled(true);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }
}
  • StateListDrawable文件(button_enabled xml)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:drawable="@drawable/green">item>
    <item android:state_enabled="false" android:drawable="@drawable/green_mint">item>
selector>

3、mipmap资源

drawable和mipmap目录的对比

  • 我使用的版本的AS自动生成的 drawable 目录不再区分dpi,而是区分版本v24,为了让应用在高版本和低版本都能正常工作,建议存两个版本的图片资源
  • mipmap是根据不同的dpi区分的,根据很多文章所说的,谷歌官方对mipmap的定位就是存放launcher icon(桌面图标)的,由于采用mipmap纹理技术可以很好控制缩放,所以如果图片需要很精准控制缩放的话也可以放在这个文件夹
  • 其他的图片还是尽量放在 drawable 文件夹中,尤其是 9patch 图片
  • 其实图片放在这个两个文件夹中都是可以正常使用的,不过就是寻址的路径不同而已

安卓中的图片资源的使用策略

  • 当我们使用资源id来去引用一张图片时,Android会使用一些规则来去帮我们匹配最适合的图片
  • 所谓最合适的图片就是根据当前设备的 dpi 自动到 drawable 或者 mipmap 文件夹下面看对应的dpi的文件夹下面是否有相应的图片,如果有的话直接使用,不会进行缩放
  • 没有找到的话就会先一层一层往更高的dpi的目录寻找,高dpi目录都没有,在一层一层往低的dpi目录里面找相应id的图片,直到找到为止

七、主题和样式资源

1、主题资源

  • 主题资源定义在 styles xml 文件中,用 style 标签进行标记
  • 一般都是通过style 标签的 parent 属性指定继承的主题,再在里面通过 item 对一些具体的样式进行设置
  • 自定义主题使用可以直接在 manifest 里面通过 application 或者 Activity 的 theme 属性指定,在 java 代码中是在 setContentView 方法前面使用 setTheme 方法进行指定
    在这里插入图片描述

2、样式资源

  • 样式资源定义在 styles xml 文件中,用 style 标签进行标记
  • 样式使用的话直接在 xml 布局文件中使用 style 属性引入,这点和 html 很像
  • 样式定义的时候也可以使用 parent 属性指定继承的父样式,相同属性子样式会覆盖父样式的
    Android 开发(09)安卓的资源文件_第5张图片

八、菜单资源

  • res下面新建menu目录,在该目录下面新建 menu xml 文件

1、选项菜单(OptionMenu)

  • 选项菜单是由物理的菜单按键或者界面的菜单按钮所触发
  • 菜单资源文件
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/settings"
        android:title="@string/menu_title_settings">item>
    <item
        android:id="@+id/regard"
        android:title="@string/menu_title_regard">item>
menu>
  • 建立选项菜单并对选项的选择做出反应需要重写如下的方法
onCreateOptionsMenu
onOptionsItemSelected
  • 菜单内容的填充需要用到 MenuInflater 类

2、上下文菜单(ContextMenu)

  • 上下文菜单是长按某个组件弹出的菜单
  • 依然要用到 ManuInflater,菜单资源文件的写法是一样的
  • 要重写的方法有所不同分别是
onCreateContextsMenu
onContextItemSelected

九、国际化

国际化实现

  • 针对不同的语言建立如下所示的文件夹,并复制字符串资源(string xml)到相应的语言目录下
  • 修改不同文件夹下的 string xml 文件,这样无需我们做额外的处理,应用即可根据系统的语言环境自动显示相应的语言
  • android视图下可能看不到我们创建的文件夹,切换到 project 即可
    Android 开发(09)安卓的资源文件_第6张图片

你可能感兴趣的:(Android)