【问题标题】:Can a Context Menu open an Image View?上下文菜单可以打开图像视图吗?
【发布时间】:2013-01-21 06:36:08
【问题描述】:

注意:这个问题是不同的,不是完全重复的。这表明图像需要弹出没有对话框。甚至没有人费心去研究这个问题,看看它是否是重复的,不是。

我正在尝试从上下文菜单中打开图像视图,但是我不知道如何执行此操作。单击上下文菜单中的某个项目时,我需要出现一个图像视图。甚至可以从上下文菜单中打开图像视图吗?人们建议改用对话框,但我想知道这种特定方式是否可行。先感谢您。这是我的代码:

package com.carouseldemo.main;

import android.app.Activity;


import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;

import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.carouseldemo.controls.Carousel;
import com.carouseldemo.controls.CarouselAdapter;
import com.carouseldemo.controls.CarouselAdapter.AdapterContextMenuInfo;
import com.carouseldemo.controls.CarouselAdapter.OnItemClickListener;
import com.carouseldemo.controls.CarouselAdapter.OnItemSelectedListener;
import com.carouseldemo.controls.CarouselItem;

public class MainActivity extends Activity {


    @Override
      public boolean onContextItemSelected(MenuItem item) {
            int id = item.getItemId(); // you know which menu is clicked
            ImageView popup = new ImageView(this);
        //set the image 
            popup.setImageResource(R.drawable.cat); // or setImageBitmap ,
                                                            // or setImageUti etc
        // this will make the ImageView fill the entire content area. If you don't want this wrap it with another layout
            ((FrameLayout) findViewById(android.R.id.content)).addView(popup);
            return super.onContextItemSelected(item);
        }


    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.testmenu1, menu);
    // your code...
    return true;} // true if you want the menu to be displayed; false otherwise

@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // Just prepare ourself for unexpected arguments...

        if (menuInfo == null) {
            return;
        }
        if (!(menuInfo instanceof AdapterContextMenuInfo)) {
            return;
        }


        AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfo;

        switch (mi.position) {
        case 0:

            menu.add("Product 1");

            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            break;
        case 1:
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            break;
        case 2:
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            break;
        case 3:
            menu.add("mouse menu");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            break;
        case 4:
            menu.add("panda menu");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            break;
        case 5:
            menu.add("rabbit menu");
            menu.add("Product 1");
            menu.add("Product 1");
            menu.add("Product 1");
            break;
        default:
            break;
        }
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        final Carousel carousel = (Carousel) findViewById(R.id.carousel);
        carousel.setOnItemClickListener(new OnItemClickListener() {



            public void onItemClick(CarouselAdapter<?> parent, View view,
                    int position, long id) {
                CarouselItem item = (CarouselItem) parent.getChildAt(position);

                // HERE: Force context menu
                carousel.showContextMenuForChild(item);
                Toast.makeText(
                        MainActivity.this,
                        String.format("%s has been clicked",
                                ((CarouselItem) parent.getChildAt(position))
                                        .getName()), Toast.LENGTH_SHORT).show();







            }

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {

                // TODO Auto-generated method stub





            }

            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean onContextItemSelected(MenuItem item) {
                // TODO Auto-generated method stub
                return false;
            }});



        carousel.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(CarouselAdapter<?> parent, View view,
                    int position, long id) {

                final TextView txt = (TextView) (findViewById(R.id.selected_item));

                switch (position) {
                case 0:
                    txt.setText("The cat (Felis catus), also known as the domestic cat or housecat to distinguish it from other felids and felines, is a small, usually furry, domesticated, carnivorous mammal that is valued by humans for its companionship and for its ability to hunt vermin and household pests. Cats have been associated with humans for at least 9,500 years, and are currently the most popular pet in the world. Owing to their close association with humans, cats are now found almost everywhere in the world.");
                    break;
                case 1:
                    txt.setText("The hippopotamus (Hippopotamus amphibius), or hippo, from the ancient Greek for \"river horse\" (), is a large, mostly herbivorous mammal in sub-Saharan Africa, and one of only two extant species in the family Hippopotamidae (the other is the Pygmy Hippopotamus.) After the elephant, the hippopotamus is the third largest land mammal and the heaviest extant artiodactyl.");
                    break;
                case 2:
                    txt.setText("A monkey is a primate, either an Old World monkey or a New World monkey. There are about 260 known living species of monkey. Many are arboreal, although there are species that live primarily on the ground, such as baboons. Monkeys are generally considered to be intelligent. Unlike apes, monkeys usually have tails. Tailless monkeys may be called \"apes\", incorrectly according to modern usage; thus the tailless Barbary macaque is called the \"Barbary ape\".");
                    break;
                case 3:
                    txt.setText("A mouse (plural: mice) is a small mammal belonging to the order of rodents. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are also common. This rodent is eaten by large birds such as hawks and eagles. They are known to invade homes for food and occasionally shelter.");
                    break;
                case 4:
                    txt.setText("The giant panda, or panda (Ailuropoda melanoleuca, literally meaning \"black and white cat-foot\") is a bear native to central-western and south western China.[4] It is easily recognized by its large, distinctive black patches around the eyes, over the ears, and across its round body. Though it belongs to the order Carnivora, the panda's diet is 99% bamboo.");
                    break;
                case 5:
                    txt.setText("Rabbits (or, colloquially, bunnies) are small mammals in the family Leporidae of the order Lagomorpha, found in several parts of the world. There are eight different genera in the family classified as rabbits, including the European rabbit (Oryctolagus cuniculus), cottontail rabbits (genus Sylvilagus; 13 species), and the Amami rabbit (Pentalagus furnessi, an endangered species on Amami, Japan)");

                    break;
                }

            }

            public void onNothingSelected(CarouselAdapter<?> parent) {
            }

        });

        registerForContextMenu(carousel);
    }

}

【问题讨论】:

  • 在哪里打开ImageView
  • 我希望在单击上下文菜单中的项目后弹出图像。
  • 没有。我在这个问题中说我想知道如何在没有对话的情况下做到这一点。我想知道是否可以从上下文菜单中打开图像。之前的问题根本没有回答,它只是推荐了一种不同的方式。我需要知道这种特定方式是否可行以及如何实现。
  • 这不是重复的。哇,我不敢相信有些人甚至不在这里阅读。
  • 它在正确的位置。您是否像为 TextView、ImageView 等所做的那样从 FrameLayout(import android.widget.FrameLayout;) 导入了类?

标签: java android eclipse image emulation


【解决方案1】:

如何弹出ImageView 我已经在comment posted 中向您展示过。

如何在我选择其他项目时弹出不同的图像 上下文菜单?现在,当我选择一张图片时会显示一张图片 上下文菜单中的项目。我怎样才能让不同的图片显示出来 当我点击上下文菜单中的不同项目时?

不要使用此menu.add("Product 1"); 添加您的菜单选项。而是使用此选项:

menu.add(Menu.NONE, 1, Menu.None, "menu title");

第二个参数不是1 值,而是为您添加到ContextMenu 的每个菜单项传递一个唯一值。然后在onContextItemSelected 方法中,您可以使用item.getItemId(); 来获取被点击的菜单的ID,并据此知道点击了哪个项目。根据该项目的 id 分配图像。

第二件事是如何关闭图像视图,如图所示 卡在屏幕上,不会消失。

分配给您创建OnClickListenerOnTouchListenerImageView 并在侦听器的方法中删除ImageView

ImageView popup = new ImageView(this);    
popup.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
         ((FrameLayout) findViewById(android.R.id.content)).removeView(v);
     } 
});

【讨论】:

  • 我知道你在说什么,但无法正确实施。 gist.github.com/nixjust/c64c0ecc6d49506dde93 这就是我现在拥有的代码。我无法正确分配菜单的 id,而且我不确定是否一切都在正确的位置。我要打开的第二张图片是兔子,来自菜单 id 2。你能看看我做错了什么吗?
  • 我修改前的原代码总是可以在我的问题中查看,如果有帮助仅供参考。
  • 更新:点击后图片会消失。所以这是有效的。但我无法正确分配菜单 ID。
  • @LuluR 我已经编辑了要点,请查看gist.github.com/luksprog/5a6dd3e7f901a5d32cb5
  • 谢谢!你真的帮助了我。一个多星期以来,我一直在寻找解决方案。再次感谢您的所有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多