Стилизация поставщика действий Share в Android

введите здесь описание изображения

Вот как я делюсь контентом через Share Action Provider:

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,
                    "Check the Link  : " + url);
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, "Share with"));

Я хочу стилизовать общий ресурс с помощью window. Я хочу изменить цвет текста и цвет линии выделения с синего цвета по умолчанию на мой пользовательский цвет. Я использую светлую тему Holo. Я не знаю, как стилизовать эти элементы. Может ли кто-нибудь указать ссылку, чтобы сделать это?

Есть ли способ получить доступ к атрибутам android.widget.ShareActionProvider через стиль?


person intrepidkarthi    schedule 09.01.2013    source источник
comment
Можете ли вы немного прояснить, чего именно вы хотите? Было бы лучше, если бы вы могли показать свой предыдущий код и усилия.   -  person Kanth    schedule 09.01.2013
comment
@Appu обновил вопрос   -  person intrepidkarthi    schedule 09.01.2013


Ответы (3)


Насколько я знаю, вы не можете стилизовать диалоговое окно выбора. Это действие системного уровня, в котором используется системная тема по умолчанию.

person Franci Penov    schedule 09.01.2013
comment
хорошо. Где я могу найти элементы стиля для android.widget.ShareActionProvider? Является ли это возможным? - person intrepidkarthi; 09.01.2013

Я не знаю, как стилизовать диалог, я видел разные макеты на разных устройствах. Но вы можете использовать PackageManager.queryIntentActivities(Intent intent, int flag), чтобы получить все действия, которые могут обработать это намерение. И используйте данные списка, чтобы создать свой собственный выбор.

РЕДАКТИРОВАТЬ: демо

    final Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.google.com"));
    PackageManager pm = getPackageManager();
    final List<ResolveInfo> infos = pm.queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
    CharSequence[] names = new CharSequence[infos.size()];
    for (int i = 0; i < infos.size(); i++) {
        names[i] = infos.get(i).loadLabel(pm);
    }
    new AlertDialog.Builder(this).setItems(names,
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ResolveInfo info = infos.get(which);
                    intent.setClassName(info.activityInfo.packageName,
                            info.activityInfo.name);
                    startActivity(intent);
                }
            }).show();
person faylon    schedule 09.01.2013
comment
Я не могу найти ссылку, поэтому я пишу демо для вас. - person faylon; 09.01.2013
comment
Спасибо @faylon. я попробую это - person intrepidkarthi; 09.01.2013
comment
Спасибо @faylon. Хорошая работа. Я внес некоторые изменения в дизайн, чтобы сделать это доступным для моей темы приложения. - person Shashank_Itmaster; 20.11.2014

Вы также можете использовать вот так

        final Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT,getString(R.string.app_name));
        intent.putExtra(android.content.Intent.EXTRA_TEXT,getString(R.string.tell_your_frnd));
        PackageManager pm = getPackageManager();
        final List<ResolveInfo> infos = pm.queryIntentActivities(intent,
                PackageManager.MATCH_DEFAULT_ONLY);
        name = new String[infos.size()];
        image=new Drawable[infos.size()];
        for (int i = 0; i < infos.size(); i++) 
        {
            name[i] = (String) infos.get(i).loadLabel(pm);
            image[i]=infos.get(i).loadIcon(pm);
        }


        CustomGrid adapter = new CustomGrid(ShareActivity.this,name,image);
        mGridView.setAdapter(adapter);

        mGridView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
        {

            ResolveInfo info = infos.get(position);

            intent.setClassName(info.activityInfo.packageName,
                    info.activityInfo.name);
            startActivity(intent);
        }
    });
person Ram    schedule 01.09.2015