代码之家  ›  专栏  ›  技术社区  ›  Alessandro Iudicone Cloudkollektiv

在运行时删除工具栏项

  •  2
  • Alessandro Iudicone Cloudkollektiv  · 技术社区  · 7 年前

    我有一个 工具栏 在我想要的应用程序中 动态修改it内容 ,在应用程序执行期间(换句话说,在运行时)。

    例如,该应用程序能够拍摄和预览照片;预览这些照片后,用户可以选择一些照片并执行发送操作到服务器。我还想让用户能够删除照片,一旦其中一些被选中,为此,我希望在行动栏上的“删除”项目(可通过垃圾图标识别)将只有在一个或多个照片被选中时可见。

    这可能吗? 如果是,如何?

    Toolbar

    目前,我只需要“删除”(或使其不可见)工具栏中的项目,但了解是否 可以在运行时在工具栏中添加项目 .

    我添加了一些代码,可以帮助理解这个问题。

    文件位于“/res/layout”中,以图形方式定义工具栏

    <?xml version="1.0" encoding="utf-8"?>
    
    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:elevation="4dp"
        android:theme="@style/ToolbarTheme" />
    

    菜单资源。xml 文件,该文件定义工具栏项

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <!-- "User favourite function", should appear as action button if possible -->
    <item
        android:id="@+id/action_app_icon"
        android:icon="@mipmap/ic_launcher"
        android:title="@string/action_bar_app_icon"
        app:showAsAction="always" />
    
    <!-- Settings, should always be in the overflow -->
    <item
        android:id="@+id/action_delete"
        android:icon="@drawable/trash"
        android:title="@string/action_bar_delete"
        app:showAsAction="always"/>
    
    <!-- Settings, should always be in the overflow -->
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/settings"
        android:title="@string/action_bar_settings"
        app:showAsAction="never"/>
    
    <!-- About, should always be in the overflow -->
    <item
        android:id="@+id/about"
        android:icon="@android:drawable/ic_dialog_info"
        app:showAsAction="never"
        android:title="@string/action_bar_about"/>
    

    工具栏所在活动的一部分

    public class myClass extends AppCompatActivity implements View.OnClickListener {
    
    // Instantiating a toolbar
    private Toolbar toolbar;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_class);
    
        // Adding toolbar to the activity
        toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(toolbar);
    
        // Get a support ActionBar corresponding to this toolbar
        ActionBar ab = getSupportActionBar();
        // Enable the Up button
        ab.setDisplayHomeAsUpEnabled(true);
        }
    
        // The method that creates an options menu
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_resource, menu);
            // This make the delete item invisible
            menu.findItem(R.id.action_delete).setVisible(false);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_settings:
                    // Perform the settings action
                    return true;
                case R.id.about:
                    // Perform the about
                    return true;
                case R.id.action_delete:
                    deletePhotos();
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    
    
        public static void manageSelection(Boolean state, int position){
            if (photoArray.getNumberSelected() == 0) {
                // disable the trash icon and its functionality;
            } else {
                // enable the trash icon with its functionality;
            }
        }
    
        // This method allows to deleteItems images to the array
        public void deletePhotos() {
            //code for deleting photos
        }
    }
    

    谢谢你抽出时间。

    2 回复  |  直到 7 年前
        1
  •  9
  •   Crono    7 年前

    请在您的活动中尝试此代码:

    public class ActivityClass extends AppCompatActivity {
    
        MenuItem menuItem; // Make global toolbar's menuItem
    
        .
        .
        .
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_layout, menu);
    
            menuItem = menu.findItem(R.id.toolbar_action_button) // Your toolbar´s button ID and save it in your global menuItem
    
            return super.onCreateOptionsMenu(menu);
        }
    
        public void showMenuItem(){
            menuItem.setVisible(true); // Call this method in runtime when you need show it
        }
    
        public void hideMenuItem(){
            menuItem.setVisible(false); // Call this method in runtime when you need hide it
        }
    

    [编辑]

    幸亏 Alessandro Iudicone

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_layout, menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        public void showMenuItem(){
            toolbar.getMenu().findItem(R.id.toolbar_actio‌​n_button).setVisible‌​(true);
        }
    
        public void hideMenuItem(){
            toolbar.getMenu().findItem(R.id.toolbar_actio‌​n_button).setVisible‌​(false);
        }
    

        2
  •  0
  •   tim.paetz    7 年前

    隐藏图标:

    toolbar.findViewById(R.id.menu_item_id).setVisibility(View.INVISIBLE);
    

    要将视图添加到工具栏,请执行以下操作:

    TextView textView = new TextView(MainActivity.this);
    textView.setText("Hello World");
    toolbar.addView(textView);
    

    这只适用于工具栏本身上的视图,不适用于溢出菜单。如果您想弄乱溢出菜单,可能必须使用此堆栈溢出答案中的代码: Android Toolbar overflow menu view id