2014-12-02 9 views
1

Есть ли способ, которым мы можем настроить макет Share Intent? По умолчанию используется ListView, что делать, если клиент хочет все одинаково, но показывать сетку! Я знаю, как фильтровать необходимые приложения с помощью packageManager. Но я хочу изменить ListView на gridView со всем остальным.Поделиться Настроить: настроить макет

+0

вы хотите показать только значок приложения в gridview или значок с именем? – Riser

+0

приложение с именем. – Prachi

ответ

2

вызовов ниже диалога в соответствии с вашими требованиями:

private void showAlertDialog() { 
     PackageManager pm = getPackageManager(); 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     GridView gridView = new GridView(this); 

     email.putExtra(Intent.EXTRA_EMAIL, 
       new String[] { "[email protected]" }); 
     email.putExtra(Intent.EXTRA_SUBJECT, "Hi"); 
     email.putExtra(Intent.EXTRA_TEXT, "Hi,This is Test"); 
     email.setType("text/plain"); 
     List<ResolveInfo> launchables = pm.queryIntentActivities(email, 0); 

     Collections 
       .sort(launchables, new ResolveInfo.DisplayNameComparator(pm)); 

     adapter = new AppAdapter(pm, launchables); 
     gridView.setNumColumns(3); 
     gridView.setAdapter(adapter); 
     gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int position, long arg3) { 
       // TODO Auto-generated method stub 
       ResolveInfo launchable = adapter.getItem(position); 
       ActivityInfo activity = launchable.activityInfo; 
       ComponentName name = new ComponentName(
         activity.applicationInfo.packageName, activity.name); 
       email.addCategory(Intent.CATEGORY_LAUNCHER); 
       email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
         | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
       email.setComponent(name); 
       startActivity(email); 
      } 
     }); 


     builder.setView(gridView); 
     builder.setTitle("Share"); 
     builder.show(); 
    } 

row.xml класса

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:orientation="vertical" 
    android:padding="5dp" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:paddingBottom="2dp" 
     android:paddingLeft="2dp" 
     android:paddingRight="5dp" 
     android:paddingTop="2dp" /> 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/icon" 
     android:gravity="center_vertical" 
     android:paddingBottom="2sp" 
     android:paddingTop="4sp" 
     android:textColor="@android:color/white" 
     android:textSize="11pt" /> 

</LinearLayout> 

адаптер:

class AppAdapter extends ArrayAdapter<ResolveInfo> { 
     private PackageManager pm = null; 

     AppAdapter(Context context, PackageManager pm, List<ResolveInfo> apps) { 
      super(context, R.layout.row, apps); 
      this.pm = pm; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = newView(parent); 
      } 

      bindView(position, convertView); 

      return (convertView); 
     } 

     private View newView(ViewGroup parent) { 
      return (getLayoutInflater().inflate(R.layout.row, parent, false)); 
     } 

     private void bindView(int position, View row) { 
      TextView label = (TextView) row.findViewById(R.id.label); 

      label.setText(getItem(position).loadLabel(pm)); 

      ImageView icon = (ImageView) row.findViewById(R.id.icon); 

      icon.setImageDrawable(getItem(position).loadIcon(pm)); 
     } 
    } 
+0

@ Vera проверьте это – Riser

+0

Спасибо, Слейд, но что такое Custom_chooser.this? Я сделал отдельный класс для адаптера, а Custom_chooser не разрешен! – Prachi

+0

Да, это ваше имя или контекст. См. Мой отредактированный ответ. – Riser

Смежные вопросы