Skip to main content

Contextual Action Mode in android











In this tutorial we will learn, how to activate the contextual action mode, which is very similar to the floating context menu, but shows the menu options in the action bar instead of a pop up menu. We will activate this contextual action menu on a long click, by setting an onLongClickListener on our View. We will set it’s title and implement an ActionMode.Callback interface, in which we then override the oncreateActionMode, onPrepareActionMode, onActionItemClicked and onDestroyActionMode methods. There we inflate our app bar menu with our own menu xml file and handle click events on the single menu items.
Lastly we will learn, how to change the color of our action mode app bar and how to prevent it from pushing our toolbar away, instead of displaying on top of it, by using the windowActionBarOverlay attribute in our styles.xml file.



In activity_main.xml file add these lines of codes:-


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</android.support.constraint.ConstraintLayout>

In res file add a directory menu within these directory add a file example_menu.xml within this file add this line of code :-

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/option_1"
        android:icon="@drawable/ic_delete"
        android:title="Option 1" />

    <item
        android:id="@+id/option_2"
        android:icon="@drawable/ic_share"
        android:title="Option 2" />


</menu>

In  MainActivity.java  class file add these lines of codes:-

public class MainActivity extends AppCompatActivity {
    private ActionMode mActionMode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.text_view);
        textView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (mActionMode != null) {
                    return false;
                }

                mActionMode = startSupportActionMode(mActionModeCallback);
                return true;
            }
        });
    }

    private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.getMenuInflater().inflate(R.menu.example_menu, menu);
            mode.setTitle("Choose your option");
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
                case R.id.option_1:
                    Toast.makeText(MainActivity.this, "Option 1 selected", Toast.LENGTH_SHORT).show();
                    mode.finish();
                    return true;
                case R.id.option_2:
                    Toast.makeText(MainActivity.this, "Option 2 selected", Toast.LENGTH_SHORT).show();
                    mode.finish();
                    return true;
                default:
                    return false;
            }
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            mActionMode = null;
        }
    };
}


Under res folder within styles.xml file add these lines of codes:-

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="actionModeBackground">@color/colorPrimary</item>
        <item name="windowActionBarOverlay">true</item>
    </style>


</resources>


Now, run the code on your emulator and see the output of contextual action menu on action bar in android.


Comments

Popular posts from this blog

BottomNavigationView

In this tutorial we will learn, how to add a bottom navigation to your activity and use it to switch between different fragments. We will fill our BottomNavigationView with 3 menu items and then check which item was selected with the OnNavigationItemSelectedListener interface and a switch statement. We will then create the appropriate fragment and display it in a FrameLayout with help of the getSupportFragmentManager, beginTransaction and replace methods. Link & Dependencies:- developer.android.com/topic/libraries/support-library/packages.html#design Add a directory in res folder and name it as menu. After adding menu folder in res folder add a xml file and name it bottom_navigation.xml. <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_home_black_24dp" android:titl...

UPI Payment Integration Android

                                 In this tutorial we will learn how to integrate upi payment gateway in our app. In gradle file add this dependency:- // EasyUpiPayment Library implementation 'com.shreyaspatil:EasyUpiPayment:3.0.0' Note:- Minimum Sdk must not be below 19 In MainActivity.java class file add these lines of codes:- package com.deftskill.upiintegration; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.shreyaspatil.easyupipayment.EasyUpiPayment; import com.shreyaspatil.easyupipayment.listener.PaymentStatusListener; import com.shreyaspatil.easyupipayment.model.PaymentApp; import com.shreyaspatil.easyupipayment.model.TransactionDetails; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements PaymentStatusListener {     private EasyUpiPayment easyUpiPayment; ...

Clean Code in 2026: Why "Good Enough" Isn't Good Enough Anymore

Let’s be honest: we’ve all been there. You open a file you wrote six months ago, squint at the screen, and think, "Who wrote this, and what on earth were they trying to do?" In 2026, the stakes for writing Clean Code are higher than ever. With AI generating half our boilerplate and systems becoming more distributed by the second, "messy" code isn't just an eyesore—it’s a massive technical liability. Clean code isn't about being a perfectionist; it’s about being a professional who respects their future self (and their teammates). What Exactly is Clean Code? It’s not just about pretty indentation or using a trendy linter. Clean code is a philosophy. It’s the art of writing software that is readable, resilient, and easy to change. If your code is "clever" but takes three senior engineers an hour to decipher, it isn't clean. Clean code should read like well-written prose—it tells a story about what the system is doing, without the plot holes. W...