Подтвердить что ты не робот

Размер значка 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

4b9b3361

Ответ 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"/>

Смотрите здесь