Android(七)应用的资源

在这里插入图片描述

字符串资源

1.定义字符串资源文件<string>

2.使用字符串资源:①在xml文件中,②在java文件中
在左侧Android-demo-res-strings.xml中便可找到

name就是字符串资源的名称

<string name="app_name">内容</string>//定义字符串资源:开始标记和结束标记之间就可以添加字符串资源的内容,内容为显示在电脑屏幕的文字

布局文件的打开:Android-demo-res-layout-activity_main.xml

android:text="@string/motto"//导入字符串资源到文本中

注意区分大小写

用setText();可设置文本

可以通过Resources中的getString();的方法来获取字符串资源

通过MainActivity来设置字符串资源:
TextView motto=(TextView)findViewById(R.id.motto)//设置对象并获取到文本框

motto.setText(getResources().getString(R.string.motto));//对象.方法来设置文本,参数为获取到的字符串资源

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

开发步骤:1.布局界面-,2.定义字符串资源,3.使用字符串资源,4.使用颜色资源

第二步:在字符串资源文件中定义9个指定显示文字的字符串资源

第三步:在布局文件中为每个文本框设置文字,通过字符串资源实现

颜色资源

主要通过透明度+红绿蓝三种颜色进行表示

颜色值的定义:#透明度RGB
00或0代表完全透明,F或FF代表完全不透明
透明度也可以省略,代表完全不透明
在这里插入图片描述
颜色值必须是整形

选择颜色:编辑颜色的时候,在左边的行号有颜色的小色块,点击可打开拾色器选择颜色,在右上角#xxxxx就是颜色值,选择后点击choose就可选定

1.定义颜色资源文件<color>

2.使用颜色资源:①在XML文件中②在java文件中

颜色资源文件在android-res-values-colors.xml

在resources节点中设置,颜色值
name后面为颜色资源的名称
在起始标记和结束标记之间编写颜色值

andorid:background="@color/bg"//导入颜色资源到背景中

android:textColor="@color/title"//设置文字的颜色

导入颜色资源的格式:@color/

打开MainActivity:在android-demo-java-com.xxx-MainActivity

修改demo的sdk版本:在 左侧project右边有个下拉菜单栏,选择project,展开FirstProject-demo-src-build.gradle,双击打开,有个minSdkVersion 后面改一下数字

title.setTextColor(getColor(R.color.title));//为文本框设置颜色

title.setBackgroundColor(getResources().getColor(R.color.bg);//为文本框设置背景颜色

manifest注释:<!--内容-->

尺寸资源

dp:设备独立像素,在不同设备上显示的大小不同

dp应用范围:边距 组件大小

sp:可伸缩像素,可根据字体的大小进行缩放或扩大

sp应用范围:设置字体大小

①定义尺寸资源文件<dimen>②使用尺寸资源:1.在XML文件中2.在java文件中

dimens.xml:在android-demo-res-values-dimens.xml 为尺寸资源文件,展开下拉框(节点),就有两个尺寸资源文件

dimens.xml 双击打开可编辑尺寸资源文件,为<resources>节点为根节点

在xml上设置尺寸资源

格式:<dimen name="">字体值 </dimen>第一个为开始标记,第二个为结束标记,内容在开始标记和结束标记中进行添加 name为字体资源的名称

尺寸值:单位加大小

布局管理器:andorid-demo-res-layout-activity_main.xml

android:textSize="@dimen/name"//设置字体大小

android:padding="@dimen/name"//设置边距

在java文件中设置尺寸资源:

主程序:android-demo-java-com.xxx-MainActivity

对象.setTextSize(getResources().getDimension(R.dimen.name));/设置文本大小,参数为获取资源内的dimension

实例:实现一个windows phone风格的方格子界面,要求通过尺寸字眼设置字体大小及边距

思路:布局界面-使用字符串资源添加文字-使用颜色资源设置背景和文字颜色-定义尺寸资源-使用尺寸资源-为布局管理器设置背景

android:layout_marginTop="@dimen/name"//在线性布局管理器中设置顶外边距

布局资源

布局资源的位置:android-demo-res-layout-activity_main.xml

根文件就是布局管理器

setContentView(R.layout.activity_main);//在MainActivity中的为指定当前activity所使用的布局资源

一个布局文件里面包含另一个布局文件:<include layout="@layout/xxx"></include>,两个布局文件就能融为一体

数组资源

数组是具有相同数据类型的一组数据的集合

定义数组资源文件

创建数组资源文件: android-demo-res-value右键-new-values resource file

file name为array.xml

</resources>  
  <array>子元素:定义普通类型数组(颜色资源,字符串资源,尺寸资源)
  <integer-array>子元素:定义整形数组(十进制的整数或者十六进制的整数)
  <string-array>子元素:定义字符串数组

<string-array name="listitem">//开始标记,设置数组的名称

<item>内容</item>//定义数组内容,可以设置多个

</string-array>//结束标记

android:entries="@array/listitem"//指定要显示的数组对象(在xml中使用数组资源)

String[] ar=getResources().getStringArray(R.array.listitem);//定义一个字符串数组,获取资源对象的数组资源,来获取到字符串资源的数组

实例一个windows phone风格的方格子界面,要求通过数组资源指定文字

开发步骤:①布局界面②定义数组资源③使用数组资源

  <integer-array name="bgcolor">             
          <item>0xBBE24A83</item>
          <item>0XBb318AD6</item>
          <item>0xBBD73943</item>
          <item>0xBBE69A08</item>
          <item>0xBBBD9663</item>
          <item>0xBBD45ABC</item>
          <item>0xBB4AA6D6</item>
          <item>0xBB8064D2</item>
          <item>0xBBF7A81E</item> 
</integer-array>                                              //在数组xml中创建一个用于定义背景颜色的整型数组

<string-array name="word">
        <item>微信</item>
        <item>通讯录</item>
        <item>QQ</item>
        <item>相机</item>
        <item>时钟</item>
        <item>备忘录</item>
        <item>音乐</item>
        <item>互联网</item>
        <item>邮件</item>
</string-array> 

//数组xml中创建一个用于定义显示文字的字符串数组
int[] tvid={R.id.textView1,R.id.textView2,R.id.textView3,R.id.textView4,R.id.textView5,R.id.textView6,R.id.textView7,R.id.textView8,R.id.textView9};//在onCreate方法前面定义一个全局整型的数组,用于保存文本框id,每个数组元素就是每个文本框的id

for(int i=0;i<9;i++){}//用for循环来为每个文本框设置背景颜色和显示文字

int [] color=geResources().getIntArray(R.array.bgcolor);定义一个整型数组,通过getResources() 方法来获取资源对象,通过getIntArray(R.array.bgcolor)方法来获取整型数组

String[] word=getResources().getStringArray(R.array.word)定义一个字符串数组,,通过getResources() 方法来获取资源对象,通过getStringArray(R.array.word)方法来获取整型数组用于储存要显示的文字

TextView tv=(TextView)findViewById(tvid[i]);//在for 循环体中获取文本框组件对象,参数为定义的数组资源对象,逐个获取文本框组件

tv.setBackgroundColor(color[i]);/在for 循环体中设置文本框组件的背景颜色,对象.方法来设置文本框组件的背景颜色,参数为定义的数组资源对象,逐个设置文本框组件的背景颜色

tv.setText(word[i]);//在for 循环体中逐个设置要显示的文字,对象.方法来设置,参数为定义的数组资源对象

源码:
布局管理器
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">

   <TextView
       android:id="@+id/textView1"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginTop="136dp"
       android:layout_marginEnd="16dp"
       android:layout_marginRight="16dp"
       android:layout_marginBottom="161dp"
       app:layout_constraintBottom_toTopOf="@+id/textView8"
       app:layout_constraintEnd_toStartOf="@+id/textView3"
       app:layout_constraintStart_toEndOf="@+id/textView2"
       app:layout_constraintTop_toTopOf="parent" />

   <TextView
       android:id="@+id/textView2"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginStart="38dp"
       android:layout_marginLeft="38dp"
       android:layout_marginTop="141dp"
       android:layout_marginEnd="17dp"
       android:layout_marginRight="17dp"
       android:layout_marginBottom="26dp"
       app:layout_constraintBottom_toTopOf="@+id/textView4"
       app:layout_constraintEnd_toStartOf="@+id/textView1"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="parent" />

   <TextView
       android:id="@+id/textView3"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginTop="133dp"
       android:layout_marginEnd="65dp"
       android:layout_marginRight="65dp"
       android:layout_marginBottom="35dp"
       app:layout_constraintBottom_toTopOf="@+id/textView5"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toEndOf="@+id/textView1"
       app:layout_constraintTop_toTopOf="parent" />

   <TextView
       android:id="@+id/textView4"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginStart="27dp"
       android:layout_marginLeft="27dp"
       android:layout_marginEnd="6dp"
       android:layout_marginRight="6dp"
       android:layout_marginBottom="10dp"
       app:layout_constraintBottom_toTopOf="@+id/textView8"
       app:layout_constraintEnd_toStartOf="@+id/textView5"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toBottomOf="@+id/textView2" />

   <TextView
       android:id="@+id/textView5"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginEnd="10dp"
       android:layout_marginRight="10dp"
       android:layout_marginBottom="338dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toStartOf="@+id/textView6"
       app:layout_constraintStart_toEndOf="@+id/textView4"
       app:layout_constraintTop_toBottomOf="@+id/textView3" />

   <TextView
       android:id="@+id/textView6"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginEnd="36dp"
       android:layout_marginRight="36dp"
       android:layout_marginBottom="15dp"
       app:layout_constraintBottom_toTopOf="@+id/textView9"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toEndOf="@+id/textView5"
       app:layout_constraintTop_toBottomOf="@+id/textView3" />

   <TextView
       android:id="@+id/textView7"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginStart="38dp"
       android:layout_marginLeft="38dp"
       android:layout_marginEnd="8dp"
       android:layout_marginRight="8dp"
       app:layout_constraintBottom_toBottomOf="@+id/textView8"
       app:layout_constraintEnd_toStartOf="@+id/textView8"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="@+id/textView9" />

   <TextView
       android:id="@+id/textView8"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginEnd="13dp"
       android:layout_marginRight="13dp"
       android:layout_marginBottom="204dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toStartOf="@+id/textView9"
       app:layout_constraintStart_toEndOf="@+id/textView7"
       app:layout_constraintTop_toBottomOf="@+id/textView1" />

   <TextView
       android:id="@+id/textView9"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:layout_marginEnd="43dp"
       android:layout_marginRight="43dp"
       android:layout_marginBottom="198dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toEndOf="@+id/textView8"
       app:layout_constraintTop_toBottomOf="@+id/textView6" />

</androidx.constraintlayout.widget.ConstraintLayout>
数组资源
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bgcolor">
        <item>0xBBE24A83</item>
        <item>0XBb318AD6</item>
        <item>0xBBD73943</item>
        <item>0xBBE69A08</item>
        <item>0xBBBD9663</item>
        <item>0xBBD45ABC</item>
        <item>0xBB4AA6D6</item>
        <item>0xBB8064D2</item>
        <item>0xBBF7A81E</item>
    </integer-array>                                              //在数组xml中创建一个用于定义背景颜色的整型数组

<string-array name="word">
<item>微信</item>
<item>通讯录</item>
<item>QQ</item>
<item>相机</item>
<item>时钟</item>
<item>备忘录</item>
<item>音乐</item>
<item>互联网</item>
<item>右键</item>

</string-array>



</resources>
主程序
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    int[] tvid={R.id.textView1,R.id.textView2,R.id.textView3,R.id.textView4,R.id.textView5,R.id.textView6,R.id.textView7,R.id.textView8,R.id.textView9};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int [] color=getResources().getIntArray(R.array.bgcolor);
        String[] word=getResources().getStringArray(R.array.word);
        for(int i=0;i<9;i++){
            TextView tv=(TextView)findViewById(tvid[i]);
            tv.setBackgroundColor(color[i]);





        }


    }
}

Drawable资源

在res目录下的drawable

drawable-hdpi //保存高分辨率的图片

drawable-mdpi//保存中等分辨率的图片

①图片资源②stateListDrawable资源(状态列表资源)

绘制.9.png图片:

在Android文件夹下的-sdk-tools-draw9path.bat上或在AS中右击目标png图片(右键图片,提示框的下面就有生成.9.png的文件),选择create 9-patch file图片,在菜单栏中的open 9-patch中打开要操作的png图片(必须是png图片)

划分可操作区域的原则:选择连续的画面(对于某一块区域的图像,进行横向拉伸,不会变形,就是横向可操作区域,对于纵向拉伸,不会变形,就是纵向可操作区域),在四周的边缘进行拉伸就可划分可操作区域

show patches//显示切片。粉色区域为可缩放区域,是进行拉伸的;绿色的区域为内容显示区域,为 固定大小的区域,是不会被拉伸的;

删除划分的区域:按shift再点击拖动要删除的区域即可删除

保存9-png图片:再菜单栏中-File-save 9-path,文件名为 xx.9.png-保存

使用9-png图片:复制9png图片,在android studio 中-android-demo-res-drawable,ctrl+v粘贴9-png图片到drawable文件夹中-ok-ok

在布局管理器中使用9png图片:"@drawable/MR"

图片重命名:在图片中右键refactor(重构)-rename(重命名)

图片资源的命名规则:android中不允许图片资源的文件名中出现大写字母,且不能以数字开头

StateListDrawable资源(状态列表资源)

定义在XML文件中的Drawable对象,能根据状态来呈现不同的图像

创建状态列表资源文件:android-demo-res-drawable右键选择new-Drawable resource file
name=edittext_focused.xml文件-ok

根元素为selector

<item android:state_focused="true" android:color="#f60"/>//得到焦点样式显示颜色的样式为橙色,在新建的状态列表资源文件中编辑

<item android:state_focused="false" android:color="#0a0"/>//失去焦点显示颜色为绿色,在新建的状态列表资源文件中编辑

android:textcolor="@drawable/edittext_focused"//在布局管理器来设置状态列表资源

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

开发步骤:

①布局界面②创建StateListDrawable资源文件③使用StateListDrawable资源④根据是否输入密码决定登录按钮的可用状态
导入形状相同,颜色不同的两张图片,复制粘贴在drawable目录下

创建状态列表资源文件,文件名为button_enable.xml

<item android:state_enabled="true" android:drawable="@drawable/deep"/>//在状态列表资源文件,设置可用状态下,设置深色图片

<item android:state_enabled="false" android:drawable="@drawable/shallow"/>//在状态列表资源文件,设置不可用状态下,设置浅色图片

android:background="@drawable/button_enable"//为登录按钮设置背景,背景为定义的状态列表资源

final EditText editText=(EditText)findViewById(R.id.editText)//获取密码编辑框

final Button button=(Button)findViewById(R.id.btn_login);//获取登录按钮
edit
Text.addTextChangeListener(new TextWatcher(){//为密码编辑框设置文字改变监听器,来根据是否输入的密码来决定登陆按钮的可用状态\

if(editText.length()>0){
button.setEnabled(true);
}else{
button.setEnabled(false);
}//判断编辑框的长度大于0的时候,设置按钮为可用状态,否则编辑框没有文件,则为不可用状态,在重写的onTextChanged的方法中进行编写

在布局管理器中的design 点击魔法棒(infer constraints)可固定布局管理器的组件,魔法棒的左边(clear all constraints)可以清理固定的布局管理器的组件

mipmap资源

mipmap一般时应用app的启动图标

android:src="@mipmap/"//在布局管理器中插入mipmap图片

mipmap和drawable的区别:mipmap用于存储应用的启动图标;drawable可以用来放置图像文件,9Patch,Shape,StateListDrawable,作为背景或者时修饰的图片

主题资源

设置窗口的整体样式

在布局管理器中的design中,有个apptheme,便能打开选择主题的窗口,来选择主题

设置不显示actionbar:在选择主题的窗口-material light-material.light.noactionbar

自定义主题资源:在android-demo-res-values-styles.xml中定义,主题资源的根目录也是<resources>,使用<style>标记下的<item>标记来设置具体的样式

主题资源定义的样式设置所有或者单个activity整体的样式,不能用于单个的view组件,都是为了改变窗口外观而设置

创建样式主题:

<style name="bgTheme" parent="@style/AppTheme>//设置主题的名称,parent为继承,继承基本主题,同时为开始标记

<item name="android:windowNoTitle">false</item>//创建窗口有标题栏

<item name="android:windowBackground">@drawable/</item>//设置窗口的背景,首先先导入背景图片到drawable中

</style>//结束标记

使用样式主题:

①在androidManifest.xml中设置:在android-demo-manifests-androidmanifest.xml中,在<application标记下,android:theme="@style/name">,设置主题应用整个软件

②在java文件中设置:在android-demo-java-com.xxx-MainActivity,在setContentView(R.layout.activity_main);上方设置,setTheme(R.style.bgTheme);设置主题样式
在这里插入图片描述

样式资源

样式和主题的区别:主题为设置整体app或窗口的样式;样式为设置组件的样式

同样也能在res-values-styles.xml 中进行设置

定义样式资源:

<style name="title">// 开头标记,设置样式的名称
<item name="android:textSize">30sp</ltem>//设置文字字体大小
<item name="android:textColor">#06F</item>//设置文字颜色为蓝色
</style>//设置结束标记

使用样式资源

在布局管理器中,在组件的开头与结束标记之间,style="@style/title"//设置样式资源

样式之间可以进行继承,就能继承样式的设置,例:<style name="context" parent="title">,子样式出现与父样式一样的属性,最后的结果就是采用子样式的属性

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

开发步骤:

①布局界面,②定义黑色加粗的样式资源③设置标题为黑色加粗样式④定义黑色加粗并且水平居中的样式资源⑤设置图注为黑色加粗并且水平居中样式

<item name="android:textStyle">bold</item>//设置字体为加粗

<item name="android:textColor">@color/black</item>样式可以引用color.xml的属性(在color.xml中,#000000)

<item name="android:layout_gravity">center_horizontal</item>//设置水平居中的样式

菜单资源

选项菜单与上下文菜单

创建菜单资源文件

先创建menu目录:在res文件夹中右键-new-directory name为menu

在menu目录上单击鼠标右键-New-Menu resource file File name为menu.xml ok

根目录为<menu /menu>,在开始标记和结束标记中间进行编辑
<item android:id="message" android:title="消息"></item>//设置菜单的id与文本

创建选项菜单

按下手机菜单键时所显示的菜单

实例:实现明日学院的选项菜单

开发步骤:

①布局界面②创建菜单资源文件③添加一个选项菜单④指定各个菜单项被选择时应做的处理

创建三个activity,一个是首页(MainActivity),一个是关于(Regard),一个是设置(settings),设置好activity所对应的布局文件

<item android:id="@+id/settings" android:title="@string/menu_title_settings"></item>//设置菜单的id和引用字符串资源.添加设置的菜单

字符串资源:values-strings.xml中编写

<string name="menu_title_settings">设置 </string>

<string name="menu_title_regard">关于</string>

<string name="title1">qq:1872284159</string>

<string name="title2">电话:13615008550</string>

<string name="Regard_name">关于</string>

<item android:id="@+id/regard" android:title="@string/menu_title_regard"></item>////设置菜单的id和引用字符串资源.添加关于的菜单

在mainactivity中重写oncreateoptionsmenu()方法,添加一个选项菜单

重写方法:在空白处单击鼠标右键-generate-override methods 打字打上oncreateoptionsmenu可快速选择,选中后-ok,在重写的方法中

MenuInflater menuInflater=new MenuInflater(this);//创建并实例化menulnflater对象

menuInflater.inflate(R.menu.memu,menu);//解析菜单资源文件

return super.onCreateOptionsMenu(menu);//将菜单返回

第四步:重写onOptionsItemSelected()方法,指定各个菜单项被选择时,所应做的处理

switch(item.getItemId()){}//用switch语句来判断,条件时获取选中项的id,用case(情况进行判断)

case R.id.settings//如果时选中是设置菜单

Intent intent=new Intent(MainActivity.this,settings.class)//实例化intent对象进行页面跳转,第一个参数是上下文对象,第二个参数是要跳转的activity

startActivity(intent);//启动activity, 参数为传递的 intent

case R.id.regard:
Intent intent1=new Intent(MainActivity.this,Regard.class);
startActivity(intent1);
break;
//另一种情况,如果打开的是关于菜单项,就启动关于的intent

创建上下文菜单

在界面上长按时弹出的菜单

步骤:

①为组件注册天下文菜单②添加上下文菜单③指定菜单项被选择时所应做出的处理

实例:模拟微信朋友圈实现消息内容的复制,收藏,翻译,和举报的上下文菜单。

######开发步骤:
①布局界面②创建菜单资源文件③为文本框注册上下文菜单④添加一个上下文菜单⑤指定各个菜单项被选择时应做的处理

<item android:id="@+id/menu_copy" android:title="复制"></item>

<item android:id="@+id/menu_collect" android:title="收藏"></item>

<item android:id="@+id/menu_translate" android:title="翻译"></item>

<item android:id="@+id/menu_report" android:title="举报"></item>//设置菜单的文本

第三步:为文本框注册上下文菜单

TextView introduce;//创建文本框对象

introduce=(TextView)findViewById(R.id.introduce);//获取到布局管理器中的文本框对象

registerForContextMenu(introduce);//为文本框注册上下文菜单,参数是为哪一个组件注册上下文菜单

重写onCreateContextMenu()方法,添加一个上下文菜单

解析一个菜单文件

MenuInflater inflater=new MenuInflater(this);//创建一个MenuInflater对象

inflater.inflate(R.menu.menu,menu);//对象.方法来解析一个菜单文件

删除super.onCreateContextMenu(menu, v, menuInfo);

//重写onContextItemSelected()方法,指定各个菜单项被选择时,所应做的处理

switch(item.getItemId()){}//用switch语句来判断,选择的是哪个菜单,用item.getItemId()方法来获取菜单

case R.id.menu_copy://不同情况进行讨论,如果选择的是复制的菜单

Toast.makeText(MainActivity.this,“已复制”,Toast.LENGTH_SHORT)/.show();//弹出消息提示框,提示已复制

break;//跳出循环

return true;//返回为真

主程序代码

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

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 AppCompatActivity {
               TextView  introduce;

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflater=new MenuInflater(this);
        inflater.inflate(R.menu.menu,menu);

        super.onCreateContextMenu(menu, v, menuInfo);
    }

    @Override
    public boolean onContextItemSelected(@NonNull 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;
        }
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        introduce=(TextView)findViewById(R.id.introduce);
        registerForContextMenu(introduce);
    }
}
菜单资源文件代码:
<?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_translate" android:title="翻译"></item>
    <item android:id="@+id/menu_report" android:title="举报"></item>
</menu>
    布局管理器代码:
<?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_translate" android:title="翻译"></item>
    <item android:id="@+id/menu_report" android:title="举报"></item>
</menu>

猜你喜欢

转载自blog.csdn.net/u013074761/article/details/105195167