[Day28]简单的contextmenu

职涯在走,铁人赛文章一定要有。
大家好今天我要来继续示范其他的menu,一开始我先来示范contextmenu,ContextMenu长按选单顾名思义就是点击萤幕的某个地方两三秒後会弹出选项来给使用者选取,废话不多说那我们就开始吧!
一开始一样先上程序码

activity_main.xml

<?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/mTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请长按我"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.473"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.07" />

    <ImageView
        android:id="@+id/mImageView"
        android:layout_width="300dp"
        android:layout_height="300dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

在布局方面我给他一个TextView和一个ImageView,当使用者长按TextView後会弹出七大洲的选项给使用者选取,选取完後会将选到的洲的图显示到ImageView。

MainActivity

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

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView mTextView;
    private ImageView mImageView;

    final private int north_america = 0;
    final private int south_america = 1;
    final private int asia = 2;
    final private int europe = 3;
    final private int africa = 4;
    final private int oceania = 5;
    final private int antarctica = 6;

    String [] continent = {"北美洲","南美洲","亚洲","欧洲","非洲","大洋洲","南极洲"};
    int[] continent_image = {R.drawable.north_america,R.drawable.south_america,R.drawable.asia,R.drawable.europe
            ,R.drawable.africa,R.drawable.oceania,R.drawable.antarctica
    };

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

        mTextView = findViewById(R.id.mTextView);
        mImageView = findViewById(R.id.mImageView);
        registerForContextMenu(mTextView);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(1, north_america,1,"北美洲");
        menu.add(1, south_america,2,"南美洲");
        menu.add(1, asia,3,"亚洲");
        menu.add(1, europe,4,"欧洲");
        menu.add(1, africa,5,"非洲");
        menu.add(1, oceania,6,"大洋洲");
        menu.add(1, antarctica,7,"南极洲");
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        int id = item.getItemId();
        switch (id){
            case north_america:
                mImageView.setImageResource(continent_image[0]);
                break;
            case south_america:
                mImageView.setImageResource(continent_image[1]);
                break;
            case asia:
                mImageView.setImageResource(continent_image[2]);
                break;
            case europe:
                mImageView.setImageResource(continent_image[3]);
                break;
            case africa:
                mImageView.setImageResource(continent_image[4]);
                break;
            case oceania:
                mImageView.setImageResource(continent_image[5]);
                break;
            case antarctica:
                mImageView.setImageResource(continent_image[6]);
                break;
        }
        return super.onContextItemSelected(item);
    }
}

我来介绍一下长按选单会用到的方法:

  • onCreateContextMenu 和前一天OptionsMenu的onCreateOptionsMenu一样是完成menu的初始化。
    1.groupId 分组的组别,如过不要分组的话输入Menu.NONE
    2.ItemId app藉由不同的id来分别出不同的选单
    3.order 一样是选单的排列顺序
    4.title 设定选单的名称
  • onContextItemSelected 和选项选单的onOptionsItemSelected一样当选取到项目时要做的下一步动作。

一样附上图片来源:
北美洲
南美洲
非洲
亚洲
南极洲
欧洲
大洋洲

这样就完成一个长按选单了,那今天的示范就到这了,谢谢大家的观看。


<<:  Day27. 范例:Line群组通知(观察者模式)

>>:  Day 29

Day 2 浮点运算及记忆体

今天先来谈一下浮点运算的问题,在ARMv8的架构下,主要还是依IEEE 754的规定来作运算标准,唯...

[区块链&DAPP介绍 Day21] contract 案例3 - 比大小下注游戏

今天来聊聊我们的第三个案例。我们来做一个比大小的下注游戏。 情境 需要有两个角色。 GM 玩家 功能...

arduino函式库的安装与使用

大家好今天要继续介绍arduino函式库安装与使用 arduino IDE本身会有内建一些函式库让你...

冒险村29 - API - exchange_rate

29 - API - exchange_rate 本次范例以 exchangerate-api 为例...

Day 6 中场休息。转职路上的旁徨

今天来聊聊转职的困难。 其实从一开始决定要学新的技能就有很多事情需要考虑跟抉择,以下两个部份是在这条...