菜单上的通话功能点击Android

时间:2016-06-20 08:19:27

标签: java android

我是初学Android开发人员并尝试为溢出菜单实现一个功能。 我的菜单代码是这样的

public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if(id==android.R.id.home) {
        finish();
    }else if (id == R.id.image) {
        takeScreenshot(); // getting error like The method takeScreenshot(Context, View) in the type QuoteViewActivity is not applicable for the arguments ()
        return true;
    }

和 功能代码就像

public static void takeScreenshot(Context context, View view) {

    String path = Environment.getExternalStorageDirectory().toString()
            + "/" + "test.png";  


    View v = view.findViewById(android.R.id.content).getRootView();
    v.setDrawingCacheEnabled(true);

    v.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
    v.setDrawingCacheEnabled(false);

    OutputStream out = null;
    File imageFile = new File(path);

    try {
        out = new FileOutputStream(imageFile);
        // choose JPEG format
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
    } catch (FileNotFoundException e) {
        // manage exception
    } catch (IOException e) {
        // manage exception
    } finally {

        try {   
            if (out != null) {
                out.close();
            }

        } catch (Exception exc) {
        }

    }

    // onPauseVideo();
    Intent share = new Intent(Intent.ACTION_SEND);

    share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile));
    share.setType("image/png");
    ((Activity) context).startActivityForResult(
            Intent.createChooser(share, "Share Drawing"), 111);
}

如何在菜单上点击它? 对不起开发人员的愚蠢问题 感谢

3 个答案:

答案 0 :(得分:0)

您处理菜单项上的点击的方式如下:

首先,设置选项菜单:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   MenuInflater mnuInflater = getSupportMenuInflater();
   mnuInflater.inflate(R.menu.your_menu_xml, menu);        
   return true;
}

处理点击次数:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
    case R.id.menu_settings:
       // EITHER CALL THE METHOD HERE OR DO THE FUNCTION DIRECTLY
       yourMethod();

       return true;

   default:
       return super.onOptionsItemSelected(item);
  }
}

在这里执行yourMethod()中的函数:

private void yourMethod() {
    // TODO Auto-generated method stub      
}

答案 1 :(得分:0)

从我看来,它应该如下:

takeScreenshot(this, findViewById(R.id.your_root_layout));

但是,如果takeScreenshot();不是静态的,您可以在活动中致电takeScreenshot

答案 2 :(得分:0)

private void takeScreenshot() {
Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

try {
    // image naming and path  to include sd card  appending name you choose for file
    String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";

    // create bitmap screen capture
    View v1 = getWindow().getDecorView().getRootView();
    v1.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
    v1.setDrawingCacheEnabled(false);

    File imageFile = new File(mPath);

    FileOutputStream outputStream = new FileOutputStream(imageFile);
    int quality = 100;
    bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
    outputStream.flush();
    outputStream.close();

    openScreenshot(imageFile);
} catch (Throwable e) {
    // Several error may come out with file handling or OOM
    e.printStackTrace();
}

}

别忘了这个

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>