我使用的是ShareActionProvider
並希望利用拆分的ActionBar時,沒有足夠的空間在頂部 - android:uiOptions="splitActionBarWhenNarrow"
。ShareActionProvider與拆分ActionBar
然而,當動作條確實需要分割時,ActionProvider似乎徹底打破低動作條的佈局:當動作條並不需要拆分
行動工作正常。它填補了頂級動作條下的整個視口和行動本身沒有出現:
有沒有人能一起成功地使用這兩個功能?
我使用的是ShareActionProvider
並希望利用拆分的ActionBar時,沒有足夠的空間在頂部 - android:uiOptions="splitActionBarWhenNarrow"
。ShareActionProvider與拆分ActionBar
然而,當動作條確實需要分割時,ActionProvider似乎徹底打破低動作條的佈局:當動作條並不需要拆分
行動工作正常。它填補了頂級動作條下的整個視口和行動本身沒有出現:
有沒有人能一起成功地使用這兩個功能?
如果沒有關係,你可以使用ActionBarSherlock,這個例子來自演示:
/*
* 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 */
}
}
}
}
錯了。如果您在該演示中使用了拆分操作欄('android:uiOptions =「splitActionBarWhenNarrow」'),則它在執行ActionBarSherlock之前的ICS上會出現與原生實現完全相同的問題。 – 2012-05-21 16:02:34
這已被固定在ActionBarSherlock- https://github.com/JakeWharton/ActionBarSherlock/issues/505
的Dev分支你可以試試。
UPDATE:現在固定在ActionBarSherlock 4.2.0
一些如何創建一個共享歷史文件修復此問題
這可以通過使用應用程序自定義共享歷史文件安裝固定。
例如調用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文件
那麼這一切都很好 享受創紀錄的子元素.......
平臺bug報告提交:http://code.google.com/p/androi d/issues/detail?id = 26027 – 2012-02-26 01:05:53
我盯着你的問題。這裏同樣的問題。在評論中,我使用最新版本獲得了相同的錯誤。 Appcompat操作欄。 – danny117 2014-03-16 21:56:46