Android中的自定义SubMenu

时间:2011-11-26 07:23:22

标签: android xml layout menu icons

  

可能重复:
  SubMenu Layout Android

是否有以下子菜单看起来像第二个(photoshopped)图像?

目前这是我的子菜单: enter image description here

这是XML文件:

<menu>
    <item android:id="@+id/facebook_icon"
        android:title="Share With Facebook"
        android:icon="@drawable/ic_menu_facebook" />

    <item android:id="@+id/twitter_icon"
        android:title="Share With Twitter"
        android:icon="@drawable/ic_menu_twitter" />         
</menu>

我希望它看起来像这样(如果你有任何想法我会很感激听到他们!): enter image description here

2 个答案:

答案 0 :(得分:1)

是的,有可能。尝试这样的事情: 1.创建用于存储项类型的类

public final class AccountTypesProvider {
  public static List<AccountType> accountTypes = Collections.unmodifiableList(Arrays.asList(
      new AccountType(AccountType.TWITTER_ACCOUNT, "Twitter", R.drawable.ic_menu_twitter),
      new AccountType(AccountType.FACEBOOK_ACCOUNT, "Facebook", R.drawable.ic_menu_facebook)     
  ));
}

2.Create ListAdapter

public final class AccountsTypesListAdapter extends ArrayAdapter<AccountType> {
  private Activity context;
  private List<AccountType> accountTypes;
  public AccountsTypesListAdapter(Activity context, List<AccountType> accountTypes) {
    super(context, R.layout.select_account_item, accountTypes);   
    this.context = context;
    this.accountTypes = accountTypes;
  }  
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View row = inflater.inflate(R.layout.select_account_item, parent, false);    
    TextView label = (TextView) row.findViewById(R.id.text_item);
    label.setText(accountTypes.get(position).title);    
    ImageView icon = (ImageView) row.findViewById(R.id.icon_item);
    icon.setImageResource(accountTypes.get(position).bigIconId);
    return row;
  }
}

3.Layout for your adapter:

<?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10px">      <ImageView android:id="@+id/icon_item"  android:layout_width="wrap_content" 
                 android:layout_height="fill_parent"/>
                 <TextView android:id="@+id/text_item" android:layout_width="wrap_content"
                   android:layout_height="fill_parent" android:paddingLeft="10px"
                   android:paddingTop="5px" android:textStyle="bold" 
                   android:textColor="#000000"/> 
        </LinearLayout>

4.和你的对话

public static void showSelectAccountTypeDialog(Activity context, String title, OnClickListener dialogListener) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(title);
    builder.setAdapter(new AccountsTypesListAdapter(context, AccountTypesProvider.accountTypes), dialogListener);
    builder.create().show();
  }

此代码取自here

答案 1 :(得分:0)

坏消息是上下文菜单不支持图标。

好消息是你可以做些什么,但需要做更多的工作。您可以按照this article说明所需的步骤,也可以轻松使用this one等库。