在Android中设置共享操作提供程序的样式

时间:2013-01-09 03:24:45

标签: android android-intent android-theme shareactionprovider

enter image description here

以下是我通过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"));

我想用窗口设置共享的样式。我想将文本颜色和突出显示行颜色从默认的蓝色更改为我的自定义颜色。我正在使用Holo灯光主题。我不知道如何设计这些元素的样式。任何人都可以指出这样做的参考吗?

有没有办法通过样式访问android.widget.ShareActionProvider的属性?

3 个答案:

答案 0 :(得分:3)

我不知道如何设置对话框的样式,我在不同的设备中看到了不同的布局。但您可以使用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();

答案 1 :(得分:1)

据我所知,你不能设置选择器对话框的样式。它是系统级的活动,并使用默认的系统主题。

答案 2 :(得分:0)

您也可以像这样使用

        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);
        }
    });