Размер значка ShareAction на ActionBar с ShareActionProvider-v7
Я работал над моим старым ShareAction
на моем ActionBar
, и он работал с тех пор, как я обновил свои пакеты на SDK Manager
. Я видел этот документ из Google, в котором говорится:
Чтобы добавить действие "share" к вашей активности, поместите ShareActionProvider
в ресурс меню панели приложения. Например:
И я добавил то же самое без добавления Icons
:
<item android:id="@+id/action_share"
android:title="@string/share"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
Я использовал:
app:actionProviderClass="Mypackagename.ShareActionProvider"
С пользовательским ShareActionProvider
со следующим кодом. Вы можете увидеть его здесь.
Я видел хак или трюк, чтобы сделать это (с ShareActionProvider
-v4), и все было хорошо, так как я решил использовать android.support.v7.widget.ShareActionProvider
.
Итак, вот мой код:
<item
android:id="@+id/shareac"
android:title="@string/share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="always" />
Я не использовал Icon
, потому что здесь в документе говорится:
Вам не нужно указывать значок, так как ShareActionProvider
виджет заботится о своем внешнем виде и поведении. Однако вы делаете нужно указать заголовок с андроидом: название, в случае, если действие закончится в меню переполнения.
И вот что я сделал до сих пор:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main_details, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.shareac);
// Fetch and store ShareActionProvider
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
Bundle extra = getIntent().getExtras();
String title = extra.getString("title");
Bundle extraurl = getIntent().getExtras();
String url = extraurl.getString("url");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this new project from something : " + title + url);
shareIntent.setType("text/plain");
mShareActionProvider.setShareIntent(shareIntent);
return true;
}
Итак, вот что я вижу прямо сейчас в Android Studio 1.5.1 Is,
![введите описание изображения здесь]()
И если запустить и скомпилировать приложение:
![введите описание изображения здесь]()
Как вы можете видеть, размер ShareAction
слишком большой. (Он нарушает руководство MaterialDesign
, я думаю).
Я забыл сказать, что я уже пробовал android:icon="@mipmap/ic_share"
, который работал с моим предыдущим методом/трюком. Но проверьте этот предварительный просмотр с AndroidStudio
:
![введите описание изображения здесь]()
И вот после компиляции:
![введите описание изображения здесь]()
Ничего не изменилось!
Итак, мой вопрос: это ошибка или что я делаю неправильно здесь?
Intent.createChooser
тоже не работал: from: qaru.site/info/415858/...
Изменить:
Самая интересная часть, я только что увидел тот же дизайн и те же результаты из Google в следующем курсе и в том приложении, которое они назвали SunShine.
Приложение
Курс:
https://www.udacity.com//course/viewer#!/c-ud855/l-3961788738/m-4294896397
Ответы
Ответ 1
Хорошо, As ianhanniballake на этом сообщении сказал:
Значки в дизайне материалов 24dp
x 24dp
, что правильно отражено SearchView
. Однако ShareActionProvider
еще не обновлен до по умолчанию.
Кстати, я только что отправил вопрос/отчет в code.google.com
, который вы можете увидеть здесь:
http://code.google.com/p/android/issues/detail?id=200335
Кажется, что значок по умолчанию 24dp
x 24dp
, но он должен выглядеть следующим образом:
![введите описание изображения здесь]()
Но теперь это примерно так:
![введите описание изображения здесь]()
Кажется, это ошибка и все еще ждет принятия или ответа об этом. Я обновлю это сообщение, если они ответят через 7 дней!
UPDATE:
Наконец, они назначили дефект команде разработчиков, и они будут обновлять эту проблему с дополнительной информацией по мере ее появления.
Большое спасибо [email protected]
в Google для поддержки.
Ответ можно найти здесь: http://code.google.com/p/android/issues/detail?id=200335#c10
Я обновлю этот ответ, если будут доступны какие-либо обновления или любые исправления.
ОБНОВЛЕНИЕ: http://code.google.com/p/android/issues/detail?id=200335#c12
Привет, команда разработчиков исправила проблему, о которой вы сообщили и он будет доступен в будущем сборке. Благодаря
Ответ 2
Иконы в дизайне материалов 24dp x 24dp, как правильно отражено SearchView
. Тем не менее, ShareActionProvider
по-прежнему не обновляется до материального дизайна.
Вы можете установить actionModeShareDrawable
в своей теме, чтобы установить значок общего доступа в ShareActionProvider
:
<item name="actionModeShareDrawable">@drawable/share_icon</item>
Обратите внимание, что ShareActionProvider
не встречается нигде в руководящих принципах проектирования материалов и возможности Android M Direct Share (для чего в настоящее время требуется использование стандартного долевого намерения), неясно, предлагается ли ShareActionProvider
шаблон больше.
Подробнее см. здесь.
Значок приложения ShareActionProvider от AppCompat слишком велик по сравнению с другими значками
Ответ 3
Измените значок Прагматически
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main_details, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.shareac);
// Fetch and store ShareActionProvider
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
Bundle extra = getIntent().getExtras();
String title = extra.getString("title");
Bundle extraurl = getIntent().getExtras();
String url = extraurl.getString("url");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this new project from something : " + title + url);
shareIntent.setType("text/plain");
mShareActionProvider.setShareIntent(shareIntent);
//Here
item.setIcon(getResources().getDrawable(R.drawable.ic_share));
return true;
}
или Тема
<item name="actionModeShareDrawable">@drawable/ic_share</item>
Ответ 4
Если вам не нужен специальный значок для пункта меню общего доступа, попробуйте ресурс android для общего меню, как показано ниже:
<item android:id="@+id/action_share"
android:title="@string/share"
app:showAsAction="ifRoom"
android:icon="@android:drawable/ic_share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
Смотрите здесь