2012-02-06 68 views
19

我使用的是ShareActionProvider並希望利用拆分的ActionBar時,沒有足夠的空間在頂部 - android:uiOptions="splitActionBarWhenNarrow"ShareActionProvider與拆分ActionBar

landscape

然而,當動作條確實需要分割時,ActionProvider似乎徹底打破低動作條的佈局:當動作條並不需要拆分

行動工作正常。它填補了頂級動作條下的整個視口和行動本身沒有出現:

portrait

有沒有人能一起成功地使用這兩個功能?

+2

平臺bug報告提交:http://code.google.com/p/androi d/issues/detail?id = 26027 – 2012-02-26 01:05:53

+0

我盯着你的問題。這裏同樣的問題。在評論中,我使用最新版本獲得了相同的錯誤。 Appcompat操作欄。 – danny117 2014-03-16 21:56:46

回答

0

如果沒有關係,你可以使用ActionBarSherlock,這個例子來自演示: Portrait Landscape Landscape expand

/* 
* Copyright (C) 2011 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package com.actionbarsherlock.sample.demos; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 

import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.widget.TextView; 

import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 
import com.actionbarsherlock.widget.ShareActionProvider; 

/** 
* This activity demonstrates how to use an {@link android.view.ActionProvider} 
* for adding functionality to the Action Bar. In particular this demo is adding 
* a menu item with ShareActionProvider as its action provider. The 
* ShareActionProvider is responsible for managing the UI for sharing actions. 
*/ 
public class ShareActionProviders extends SherlockActivity { 

    private static final String SHARED_FILE_NAME = "shared.png"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setTheme(SampleList.THEME); //Used for theme switching in samples 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.text); 
     ((TextView)findViewById(R.id.text)).setText(R.string.share_action_providers_content); 
     copyPrivateRawResuorceToPubliclyAccessibleFile(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate your menu. 
     getSupportMenuInflater().inflate(R.menu.share_action_provider, menu); 

     // Set file with share history to the provider and set the share intent. 
     MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); 
     ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider(); 
     actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 
     // Note that you can set/change the intent any time, 
     // say when the user has selected an image. 
     actionProvider.setShareIntent(createShareIntent()); 

     //XXX: For now, ShareActionProviders must be displayed on the action bar 
     // Set file with share history to the provider and set the share intent. 
     //MenuItem overflowItem = menu.findItem(R.id.menu_item_share_action_provider_overflow); 
     //ShareActionProvider overflowProvider = 
     // (ShareActionProvider) overflowItem.getActionProvider(); 
     //overflowProvider.setShareHistoryFileName(
     // ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 
     // Note that you can set/change the intent any time, 
     // say when the user has selected an image. 
     //overflowProvider.setShareIntent(createShareIntent()); 

     return true; 
    } 

    /** 
    * Creates a sharing {@link Intent}. 
    * 
    * @return The sharing intent. 
    */ 
    private Intent createShareIntent() { 
     Intent shareIntent = new Intent(Intent.ACTION_SEND); 
     shareIntent.setType("image/*"); 
     Uri uri = Uri.fromFile(getFileStreamPath("shared.png")); 
     shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
     return shareIntent; 
    } 

    /** 
    * Copies a private raw resource content to a publicly readable 
    * file such that the latter can be shared with other applications. 
    */ 
    private void copyPrivateRawResuorceToPubliclyAccessibleFile() { 
     InputStream inputStream = null; 
     FileOutputStream outputStream = null; 
     try { 
      inputStream = getResources().openRawResource(R.raw.robot); 
      outputStream = openFileOutput(SHARED_FILE_NAME, 
        Context.MODE_WORLD_READABLE | Context.MODE_APPEND); 
      byte[] buffer = new byte[1024]; 
      int length = 0; 
      try { 
       while ((length = inputStream.read(buffer)) > 0){ 
        outputStream.write(buffer, 0, length); 
       } 
      } catch (IOException ioe) { 
       /* ignore */ 
      } 
     } catch (FileNotFoundException fnfe) { 
      /* ignore */ 
     } finally { 
      try { 
       inputStream.close(); 
      } catch (IOException ioe) { 
       /* ignore */ 
      } 
      try { 
       outputStream.close(); 
      } catch (IOException ioe) { 
       /* ignore */ 
      } 
     } 
    } 
} 

https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ShareActionProviders.java

+1

錯了。如果您在該演示中使用了拆分操作欄('android:uiOptions =「splitActionBarWhenNarrow」'),則它在執行ActionBarSherlock之前的ICS上會出現與原生實現完全相同的問題。 – 2012-05-21 16:02:34

1

一些如何創建一個共享歷史文件修復此問題

這可以通過使用應用程序自定義共享歷史文件安裝固定。

例如調用CreateShareHisotryFile()在App創建()

public class YourBrokenAPP extends Application { 

    public static SHARE_HISTORY_FILE_NAME = "c_share_hist.xml"; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    CreateShareHisotryFile(); 
} 

private void CreateShareHisotryFile() { 

    String data = "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> "+ 
       "<historical-records>" + 
        "<historical-record activity=\"com.google.android.apps.plus/com.google.android.libraries.social.gateway.GatewayActivity\" time=\"1426500217970\" weight=\"1.0\" />"+ 
      "</historical-records>"; 
    try { 
     OutputStreamWriter outputStreamWriter = new  OutputStreamWriter(openFileOutput(SHARE_HISTORY_FILE_NAME, Context.MODE_PRIVATE)); 
     outputStreamWriter.write(data); 
     outputStreamWriter.close(); 
    } 
    catch (IOException e) { 
     Log.e("Exception", "File write failed: " + e.toString()); 
    } 
} 

然後在我們剛剛創建的片段的onCreateOptionsMenu使用份額歷史文件....

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.main, menu); 

    // Set up ShareActionProvider's default share intent 
    MenuItem shareItem = menu.findItem(R.id.action_share); 
    mShareActionProvider = (ShareActionProvider) 
      MenuItemCompat.getActionProvider(shareItem); 
    mShareActionProvider.setShareHistoryFileName(c_share_hist.xml); 
} 

需要注意的是歷史,記錄需要@至少一個歷史記錄 - 在xml文件

那麼這一切都很好 享受創紀錄的子元素.......