实验四: Android 资源访问

news2024/11/26 11:39:13

实验四: 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
<?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: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,类似于以下代码:

<?xml version="1.0" encoding="utf-8"?>
<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 将会切换显示两张不同的图片。

image-20231103150347558

image-20231103150620417

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

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

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

contextmenu.xml 文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<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 文件,将以下代码添加到布局文件中:
<?xml version="1.0" encoding="utf-8"?>
<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;
    }
}
步骤五:运行应用程序

image-20231103153944310

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"/>

步骤五:运行应用程序

image-20231103160433217

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1167233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

筹码博弈K线长阳选股公式,穿越筹码密集区

普通K线是由最高价、开盘价、最低价、收盘价四个价格构成的&#xff0c;而博弈K线是以这个四个价格对应的获利盘构成K线&#xff0c;反映筹码的获利情况。把鼠标移动到K线上&#xff0c;停留在对应的价格&#xff0c;就可以在右侧的筹码分布图看到相应的获利盘数据。&#xff0…

win10 + vs2017 + cmake3.17 编译 zlib1.2.11

1. 下载并解压zlib-1.2.11 将下载得到的zlib-1.2.11解压至"D:\Depend_3rd_party\zlib1211"文件夹&#xff0c;得到"D:\Depend_3rd_party\zlib1211\zlib-1.2.11" 2. 创建build文件夹&#xff0c;install文件夹 创建build文件夹&#xff0c;位于解压文件夹内…

足底筋膜炎如何治疗

足底筋膜炎主要表现为下床站立后或休息后再次走路时&#xff0c;出现足跟部的疼痛与不适症状&#xff0c;活动后可自行缓解&#xff0c;但走路时间长或较剧烈活动后&#xff0c;疼痛会再次加重&#xff0c;甚至有针扎样疼痛感向脚前部发散&#xff0c;影响患者的日常生活。 足…

Python中的sys模块详解

1. 简介 sys模块是Python标准库中的一个内置模块&#xff0c;提供了与Python解释器和运行环境相关的功能。它包含了一些与系统操作和交互相关的函数和变量&#xff0c;可以用于获取命令行参数、控制程序的执行、管理模块和包、处理异常等。 2. 常用函数和变量 2.1 命令行参数…

金蝶云星空任意文件上传漏洞复现(0day)

0x01 产品简介 金蝶云星空是一款云端企业资源管理&#xff08;ERP&#xff09;软件&#xff0c;为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织&#xff0c;多利润中心的大中型企业&#xff0c;以 “开放、标准、社交”三大特性为数字…

基于单片机的智能拐杖软件设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、整体设计方案2.1本设计设计原理2.1.1单片机基本介绍 二、本设计方案选择三、软件设计AD原理图&#xff1a;原理图…

【python基础】python切片—如何理解[-1:],[:-1],[::-1]的用法

文章目录 前言一、基本语法二、切片1.a[i:j]2.a[i:j:k] 总结&#xff1a;[-1] [:-1] [::-1] [n::-1] 前言 在python中&#xff0c;序列是python最基本的数据结构&#xff0c;包括有string&#xff0c;list&#xff0c;tuple等数据类型&#xff0c;切片对序列型对象的一种索引方…

linux傻瓜式安装Java环境及中间件

linux配置Java环境及中间件 1.傻瓜式安装Java1.下载2.追加3.刷新测试 2.傻瓜式安装docker1.docker卸载2.docker安装 3.Docker傻瓜式安装Redis1.傻瓜式安装安装并配置 4.Docker傻瓜式安装RabbitMQ5.Docker傻瓜式安装MySql1.拉取2.配置 6.傻瓜式安装Nacos1.官网下载nacos2.SQL文件…

Java入门篇 之 数组篇

本篇碎碎念&#xff1a;这篇没有碎碎念&#xff0c;嘻嘻&#xff0c;博主个人感觉状态回来了&#xff0c;博主要加油&#xff0c;大家也要加油 今日份励志文案:纵有疾风起&#xff0c;人生不言弃&#xff01; 冲冲冲&#xff01;&#xff01;&#xff01;&#xff01; 目录 一…

Android 13.0 启动app时设置密码锁

1.前言 在13.0的系统产品开发中,对于限制某些app的启动的功能中,在项目中的需求是在点击app启动的时候,根据包名设置密码锁,当输入正确的密码的时候来启动这个app,否则 就不能启动这个app,达到限制使用app的目的,这就需要在app启动的时候,检测app的包名,然后在app启动…

jdbc Preparestatement防止SQL注入的原理

2023-10-28T03:37:11.264132Z 2 Execute select * from users where username liulemon and password \ or \1\ 1\ 可以看到这一行&#xff0c;预编译时&#xff1f;变成了转义字符 useServerPrepStmtstrue加上这句才能预编译

FBM232 P0926GW 一个基于PC的Studio应用程序

FBM232 P0926GW 一个基于PC的Studio应用程序 告别自定义编程&#xff0c;向S88 Builder问好。它可以帮助您轻松地将泵、混合器和阀门等单个批处理设备配置为特定的协调任务&#xff0c;如灌装、加热和混合。 S88 Builder是什么&#xff1f;它包括一个基于PC的Studio应用程序&…

智慧工地管理平台+智慧工地app源码

智慧工地管理平台智慧工地app源码 &#xff08;演示自主知识产权项目应用案例&#xff09; 以施工现场风险预知和联动预控为目标&#xff0c;将智能AI、传感技术、人像识别、监控、虚拟现实、物联网、5G、大数据、互联网等新一代科技信息技术植入到建筑、机械、人员穿戴设施、场…

Python实现定时对网站进行签到

文章目录 一、步骤Reference 一、步骤 首先打开我们需要签到的网站&#xff0c;使用Chrome浏览器的F12快捷键&#xff08;或通过鼠标右键菜单“检查”&#xff09;打开浏览器的开发者工具&#xff0c;点击 Network 查看所有加载的请求。 如下方动图所示&#xff0c;这个时候我…

创建Vue实例

我们已经知道了Vue框架可以 基于数据帮助我们渲染出用户界面&#xff0c;那应该怎么做呢&#xff1f; 核心步骤&#xff08;4步&#xff09;&#xff1a; 准备容器 引包&#xff08;官网&#xff09; — 开发版本/生产版本 创建Vue实例 new Vue() 指定配置项&#xff0c;渲…

Recommender System复习(考试向)

Recommender System Review OverviewCollaborative Filtering基于用户的CF&#xff08;User CF&#xff09;基于物品的CF&#xff08;Item CF&#xff09;Similarity CalculationBias in CF Evaluation of Recommender SystemFactorization MachinesLatent factor modelLFM算法…

不必安装,快速设计数据库表结构

设计数据库架构是一项具有挑战性的任务&#xff0c;当您的应用程序不断变大时&#xff0c;它变得更加困难。 一个好的表结构设计能减少不小开发量&#xff0c;也能提升部分扩展性。 什么是数据库表结构&#xff1f; 表结构就是定义一个表的字段、类型、主键、外键、索引&#x…

Window 创建定时任务

一、打开计算机管理&#xff08;我的电脑右键管理&#xff09; 选择系统工具任务计划程序在右侧边栏&#xff08;创建基本任务&#xff09;在弹出窗口常规栏&#xff08;如下图&#xff09;填写定时任务名&#xff08;随意起自己知道什么程序即可&#xff09;、任务描述 在触发…

html将复选框变为圆形样例

html将复选框变为圆形样例 说明目录使用对勾图标实现圆形复选框原复选框html代码及默认样式取消复选框未勾选前的样式新增复选框未勾选前的样式新增复选框勾选后的样式获取复选框选中后的value值 使用CSS样式写对勾图标实现圆形复选框 说明 这里记录下用原生html实现将原复选框…

<蓝桥杯软件赛>零基础备赛20周--第4周--杂题-1

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…