资源访问"/>
实验四: 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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:padding="@dimen/activity_horizontal_margin"tools:context=".MainActivity"><TextViewandroid:id="@+id/mTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/str_text" /><ImageViewandroid: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" /><Buttonandroid: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";@Overridepublic 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=""package="com.example.imageswitcherapp"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 将权限声明放在这里 --><applicationandroid: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 将会切换显示两张不同的图片。
【练习 4.2】运用上下文菜单
编写 Android 项目,实现带子菜单的上下文菜单。
步骤一:创建项目
- 在 Android Studio 中创建一个新的 Android 项目,并命名为
MenuApp
。
步骤二:准备资源文件
- 在
res
目录下创建一个menu
目录。 - 在
menu
目录中创建一个名为contextmenu.xml
的菜单资源文件。
contextmenu.xml
文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="" ><itemandroid:id="@+id/color1"android:title="红色"></item><itemandroid:id="@+id/color2"android:title="绿色"></item><itemandroid:id="@+id/color3"android:title="蓝色"></item><itemandroid:id="@+id/color4"android:title="橙色"></item><itemandroid:id="@+id/color5"android:title="恢复默认"></item><itemandroid:id="@+id/item2"android:alphabeticShortcut="e"android:title="其他颜色"><menu><groupandroid:id="@+id/other" ><itemandroid:id="@+id/other1"android:title="橄榄色"></item><itemandroid:id="@+id/other2"android:title="水绿色"></item></group></menu></item>
</menu>
步骤三:创建布局文件
- 打开
activity_main.xml
文件,将以下代码添加到布局文件中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="5px"android:orientation="vertical" ><TextViewandroid:id="@+id/show"android:textSize="60px"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="打开菜单..." />
</LinearLayout>
步骤四:编写 Java 代码
- 打开
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;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.show);registerForContextMenu(tv);}@Overridepublic 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("请选择文字颜色: ");}@Overridepublic 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;}
}
步骤五:运行应用程序
4.4 扩展练习
- 编写 Android 程序,实现带子菜单的选项菜单
步骤一:创建一个新的 Android 项目
- 在 Android Studio 中创建一个新的 Android 项目,命名为
OptionsMenuApp
。
步骤二:准备资源文件
- 在
res/menu
目录下创建一个名为options_menu.xml
的菜单资源文件。
options_menu.xml
文件内容如下:
<menu xmlns:android=""><itemandroid:id="@+id/file_menu"android:title="文件"><menu><itemandroid:id="@+id/open_file"android:title="打开文件" /><itemandroid:id="@+id/save_file"android:title="保存文件" /></menu></item><itemandroid:id="@+id/edit_menu"android:title="编辑"><menu><itemandroid:id="@+id/copy"android:title="复制" /><itemandroid:id="@+id/paste"android:title="粘贴" /></menu></item>
</menu>
步骤三:在 MainActivity.java 中实现选项菜单
-
打开
MainActivity.java
文件。 -
在
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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.options_menu, menu);return true;}@Overridepublic 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
- 打开
activity_main.xml
文件,并在布局中添加一个TextView
:
<TextViewandroid: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 资源访问
发布评论