zoukankan      html  css  js  c++  java
  • ActionBar ShareActionProvider

    添加share按钮

    添加share按钮的主要步骤:
    1. 在ActionBar中添加share按钮
    2. 从item中获取ShareActionProvider

    ShareActionProvider

    mShareActionProvider=(ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);

    3. 向ShareActionProvider中添加itent

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:support="http://schemas.android.com/apk/res-auto">
    
        <item
            android:id="@+id/share_item"
            android:title="@string/menu_share"
    
            support:actionProviderClass="android.support.v7.widget.ShareActionProvider"
            support:showAsAction="always"
            />
    </menu>
    /MainActivity.java
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu,menu);
    
        MenuItem shareItem=menu.findItem(R.id.share_item);
    
        mShareActionProvider=(ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
    
        int currentViewPagerItem=((ViewPager)findViewById(R.id.viewPager)).getCurrentItem();
        setShareItem(currentViewPagerItem);
        return super.onCreateOptionsMenu(menu);
    }
    
    
    public void setShareItem(int i){
        if(mShareActionProvider!=null){
            ContentItem item=mItems.get(i);
    
            Intent intent=item.getShareIntent(this);
    
            mShareActionProvider.setShareIntent(intent);
        }
      }
    
    public Intent getShareIntent(Context context){
        Intent intent=new Intent(Intent.ACTION_SEND);
    
        switch (contentType) {
            case CONTENT_TYPE_IMAGE:
                intent.setType("image/jpg");
                intent.putExtra(Intent.EXTRA_STREAM, getContentUri());
    
                break;
    
            case CONTENT_TYPE_TEXT:
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT, context.getString(contentResourceId));
                break;
        }
    
        return intent;
    }
    ContentItem
    public Uri getContentUri(){
        if(!TextUtils.isEmpty(contentAssetFilePath)){
            return Uri.parse(ShareProvider.CONTENT_URI+contentAssetFilePath);
        }else{
            return null;
        }
    }

    注意点

    确保ShareActionProvider和所在的ViewPager的CurrentItem()对应

    很容易被onCreateOptionsMenu()中下列代码迷惑, 以为ShareActionProvider已经和CurrentItem()对应了.

    int currentViewPagerItem=((ViewPager)findViewById(R.id.viewPager)).getCurrentItem();
    setShareItem(currentViewPagerItem);

    事实上并没有, onCreateOptionsMenu方法只会在初始ActionBar时调用, 且也不会设置监听. 所以ShareActionProvider总是设置在了第一个item的intent中.

    所以需要添加以下代码, 确保切换页面后, ShareActionProvider和item仍是正确对应的.

    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
          @Override
          public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
          }
          @Override
          public void onPageSelected(int position) {
              setShareItem(position);
          }
          @Override
          public void onPageScrollStateChanged(int state) {
          }
        });

    如何获取图片uri

    获取/res/drawable中图片的uri可以使用以下方法:

    java
    Uri imageUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE +
    "://" + getResources().getResourcePackageName(R.drawable.ic_launcher)
    + '/' + getResources().getResourceTypeName(R.drawable.ic_launcher) + '/'
    + getResources().getResourceEntryName(R.drawable.ic_launcher) );

    等价于


    Uri uri = Uri.parse("android.resource://your.package.here/drawable/image_name");

    如果不正确,可以调用第一个方法,再使用Log自行查看准确的字符串.

  • 相关阅读:
    ssh中的 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
    Http中的Get/Post方法
    Node.js(day2)
    使用clipBoard.js进行页面内容复制
    SVG之图形的引用use、剪切clipPath和蒙板mask
    SVG之文本
    SVG之Path
    SVG之颜色、渐变和笔刷的使用
    SVG坐标系统
    SVG入门
  • 原文地址:https://www.cnblogs.com/fei-hsueh/p/6106293.html
Copyright © 2011-2022 走看看