实验四: Android 资源访问

实验四: Android 资源访问

4.1 实验目的

本次实验的目的是让大家熟悉 Android 中的资源,资源指的是代码中使用 的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中。

4.2 实验要求

  • 掌握字符串资源,颜色资源和尺寸资源文件的定义和使用

  • 掌握如何通过菜单资源定义上下文菜单和选项菜单

4.3实验内容

【练习 4.1】为 ImageView 更换图片

实现本程序前需要准备两张图片, 分别存放在”/res/drawable/”文件夹与手机 文件系统的另 一个文件夹中。在本程序中两张图片文件的路径分别为 /res/drawable/img01.jpg 与/data/data/com.example.resource1/img02.jpg。程序中 会先将 drawable 目录里的图片文件显示在 ImageView 中,再设计一个 Button , 当用户单击 Button 后,将 ImageView 里的图片换成另一张存在手机文件系统里 的图形文件。好的,以下是实现该功能的详细步骤:

步骤一:准备两张图片

首先,确保你有两张要使用的图片,一张放在/res/drawable/目录下,命名为img01.jpg,另一张放在手机文件系统的另一个文件夹中,路径为/data/data/img/img02.jpg

步骤二:在布局文件中添加 TextView、ImageView 和 Button

<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:padding="@dimen/activity_horizontal_margin"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/mTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/str_text" />

    <ImageView
        android:id="@+id/mImageView"
        android:layout_width="500dp"
        android:layout_height="356dp"
        android:layout_below="@id/mTextView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:src="@drawable/img01" />

    <Button
        android:id="@+id/mButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/mImageView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="16dp"
        android:text="@string/str_button"
        android:textSize="18sp" />

RelativeLayout>

步骤三:在 MainActivity.java 中设置点击事件

打开MainActivity.java文件,并在其中添加以下代码:

package com.example.imageswitcherapp;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.io.File;

public class MainActivity extends Activity {
    private ImageView mImageView;
    private Button mButton;
    private TextView mTextView;
    private String fileName = "/data/data/img/img02.jpg";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.mButton);
        mButton.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                mImageView = (ImageView) findViewById(R.id.mImageView);
                mTextView = (TextView) findViewById(R.id.mTextView);

                File f = new File(fileName);
                if (f.exists()) {
                    Bitmap bm = BitmapFactory.decodeFile(fileName);
                    mImageView.setImageBitmap(bm);
                    mTextView.setText(fileName);
                } else {
                    mTextView.setText("文件不存在");
                }
            }
        });
    }
}
步骤四:处理文件系统权限

要访问/data/data/com.example.resource1/img02.jpg,你可能需要相应的文件系统权限。请确保你的应用程序在 AndroidManifest.xml 文件中具有相应的权限声明。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
步骤五:在 AndroidManifest.xml 中声明 Activity

确保在AndroidManifest.xml文件中声明了你的Activity,类似于以下代码:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.imageswitcherapp">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ImageSwitcherApp">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>
        activity>
    application>

manifest>
步骤六:运行应用程序

现在可以构建并运行你的应用程序。当点击按钮时,ImageView 将会切换显示两张不同的图片。

实验四: Android 资源访问_第1张图片

实验四: Android 资源访问_第2张图片

【练习 4.2】运用上下文菜单

编写 Android 项目,实现带子菜单的上下文菜单。

步骤一:创建项目
  1. 在 Android Studio 中创建一个新的 Android 项目,并命名为 MenuApp
步骤二:准备资源文件
  1. res 目录下创建一个 menu 目录。
  2. menu 目录中创建一个名为 contextmenu.xml 的菜单资源文件。

contextmenu.xml 文件内容如下:


<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/color1"
        android:title="红色">
    item>
    <item
        android:id="@+id/color2"
        android:title="绿色">
    item>
    <item
        android:id="@+id/color3"
        android:title="蓝色">
    item>
    <item
        android:id="@+id/color4"
        android:title="橙色">
    item>
    <item
        android:id="@+id/color5"
        android:title="恢复默认">
    item>
    <item
        android:id="@+id/item2"
        android:alphabeticShortcut="e"
        android:title="其他颜色">
        <menu>
            <group
                android:id="@+id/other" >
                <item
                    android:id="@+id/other1"
                    android:title="橄榄色">
                item>
                <item
                    android:id="@+id/other2"
                    android:title="水绿色">
                item>
            group>
        menu>
    item>
menu>
步骤三:创建布局文件
  1. 打开 activity_main.xml 文件,将以下代码添加到布局文件中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5px"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/show"
        android:textSize="60px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="打开菜单..." />
LinearLayout>
步骤四:编写 Java 代码
  1. 打开 MainActivity.java 文件,将以下代码添加到文件中:
package com.example.menu;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    private TextView tv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.show);
        registerForContextMenu(tv);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.contextmenu, menu);
        menu.setHeaderIcon(R.drawable.ic_launcher);
        menu.setHeaderTitle("请选择文字颜色: ");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        if (item.getGroupId() == R.id.other) {
            if (item.getItemId() == R.id.other1) {
                tv.setTextColor(Color.rgb(118, 146, 60));
            } else if (item.getItemId() == R.id.other2) {
                tv.setTextColor(Color.rgb(0, 255, 255));
            }
        } else {
            switch (item.getItemId()) {
                case R.id.color1:
                    tv.setTextColor(Color.rgb(255, 0, 0));
                    break;
                case R.id.color2:
                    tv.setTextColor(Color.rgb(0, 255, 0));
                    break;
                case R.id.color3:
                    tv.setTextColor(Color.rgb(0, 0, 255));
                    break;
                case R.id.color4:
                    tv.setTextColor(Color.rgb(255, 180, 0));
                    break;
                default:
                    tv.setTextColor(Color.rgb(255, 255, 255));
            }
        }
        return true;
    }
}
步骤五:运行应用程序

实验四: Android 资源访问_第3张图片

4.4 扩展练习

  1. 编写 Android 程序,实现带子菜单的选项菜单

步骤一:创建一个新的 Android 项目

  1. 在 Android Studio 中创建一个新的 Android 项目,命名为 OptionsMenuApp

步骤二:准备资源文件

  1. res/menu 目录下创建一个名为 options_menu.xml 的菜单资源文件。

options_menu.xml 文件内容如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/file_menu"
        android:title="文件">
        <menu>
            <item
                android:id="@+id/open_file"
                android:title="打开文件" />
            <item
                android:id="@+id/save_file"
                android:title="保存文件" />
        menu>
    item>
    <item
        android:id="@+id/edit_menu"
        android:title="编辑">
        <menu>
            <item
                android:id="@+id/copy"
                android:title="复制" />
            <item
                android:id="@+id/paste"
                android:title="粘贴" />
        menu>
    item>
menu>

步骤三:在 MainActivity.java 中实现选项菜单

  1. 打开 MainActivity.java 文件。

  2. onCreate 方法之后,添加以下代码来重写创建选项菜单的方法:

package com.example.optionsmenuapp;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.open_file:
                openFile();
                return true;
            case R.id.save_file:
                saveFile();
                return true;
            case R.id.copy:
                copyText();
                return true;
            case R.id.paste:
                pasteText();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void openFile() {
        // 处理打开文件的逻辑
        Toast.makeText(this, "打开文件", Toast.LENGTH_SHORT).show();
    }

    private void saveFile() {
        // 处理保存文件的逻辑
        Toast.makeText(this, "保存文件", Toast.LENGTH_SHORT).show();
    }

    private void copyText() {
        // 处理复制文本的逻辑
        Toast.makeText(this, "复制文本", Toast.LENGTH_SHORT).show();
    }

    private void pasteText() {
        // 处理粘贴文本的逻辑
        Toast.makeText(this, "粘贴文本", Toast.LENGTH_SHORT).show();
    }
}

步骤四:在布局文件中添加一个 TextView

  1. 打开 activity_main.xml 文件,并在布局中添加一个 TextView
<TextView
    android:id="@+id/text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello, Options Menu!"
    android:layout_gravity="center"
    android:textSize="24sp"/>

步骤五:运行应用程序

实验四: Android 资源访问_第4张图片

你可能感兴趣的:(Android,android)