Android:在菜单项中添加自定义布局

时间:2017-12-13 06:40:47

标签: android android-linearlayout android-toolbar android-menu

我想将自定义布局添加到menu.xml文件中的menuitem

 LinearLayout actionItemLayout = (LinearLayout) menu.findItem(R.id.itemMenu).getActionView();
 TextView txtNumber = (TextView)actionItemLayout.findViewById(R.id.txt_vehicleNumber);
 TextView txtName = (TextView)actionItemLayout.findViewById(R.id.txt_vehicleName);

我这样做了,但每次actionItemLayout给出null。

请帮忙

2 个答案:

答案 0 :(得分:1)

使用以下代码

getMenuInflater().inflate(R.menu.menu, menu);
MenuItem item = menu.findItem(R.id.itemMenu);
MenuItemCompat.setActionView(item, R.layout.layout_menu);
LinearLayout rootView = (LinearLayout) 
MenuItemCompat.getActionView(item);

TextView txtNumber =(TextView)rootView.findViewById(R.id.txt_vehicleNumber);    TextView txtName =(TextView)rootView.findViewById(R.id.txt_vehicleName);

这对我有用

答案 1 :(得分:0)

在你的Toolbar.xml中添加:

local:popupTheme="@style/ThemeOverlay.AppCompat.Light"

并在你的style.xml中定义你的风格:

 <style name="MyMaterialTheme.PopupOverlay" 
    parent="ThemeOverlay.AppCompat.Light" >
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
    <item name="android:colorBackground">@color/background</item>
    <item name="android:textColor">@color/colorAccent</item>
    </style>

并在您的Activity中使用onCreateOptionsMenu:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = activity.getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);

MenuItem filter_menu, profile_menu, purchage_menu; //Replace by your menu items

    filter_menu = menu.findItem(R.id.action_filter);
    menu_language = menu.findItem(R.id.menu_item_language);
    login_menu = menu.findItem(R.id.action_login);
    }

并将其用于点击:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.action_search:
      final Intent searchIntent = new Intent(MainActivity.this, 
       SearchActivity.class);
            searchIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            startActivity(searchIntent);
            // Not implemented here
            return false;
        case R.id.action_filter:

            // Not implemented here
            return false;
        case R.id.action_login:

            Intent loginIntent = new Intent(MainActivity.this, 
            LoginActivity.class);
            Util.check_for_subscription = 0;
            startActivity(loginIntent);
            // Not implemented here
            return false;