1

I am developing one app in which I have a list and a popup menu in it. But my app has black background color and text color is white. But my popup menu back color coming is white and text color is white. I have tried all posible ways but its not working. Here is my code.

Style.xml

<attr name="iconColor" format="reference" />
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/back_color</item>
    <item name="colorPrimaryDark">@android:color/holo_orange_dark</item>
    <item name="android:textColor">@color/White</item>

    <item name="android:textSize">12dp</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="iconColor">@android:color/white</item>
    <item name="android:popupBackground">@color/back_color</item>
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
    <item name="colorAccent">@android:color/holo_red_light</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >

    <item name="android:panelBackground">@color/back_color</item>
    <item name="android:textColor">@color/black</item>
</style>

<style name="StyledScrollerTextAppearance" parent="@android:style/TextAppearance">
    <item name="android:textSize">24sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@android:color/white</item>
</style>

<style name="AppTheme.TextAppearance">
    <item name="android:textColor">@color/White</item>
    <item name="android:textSize">12dp</item>
</style>

<style name="AppTheme.TextAppearance.Subtitle">
    <item name="android:textColor">@color/White</item>
    <item name="android:textSize">10dp</item>
</style>

<style name="PopupMenu">
    <item name="android:panelBackground">@color/back_color</item>
    <item name="android:textColor">@color/White</item>
</style>

<style name="Theme.AppCompat.Light.NoActionBarCustom" parent="Theme.AppCompat.Light.NoActionBar" >
    <item name="colorAccent">@android:color/holo_red_dark</item>
</style>

Below is recycler view adapter

 @Override
public void onBindViewHolder(ItemHolder itemHolder, int i) {
    Song localItem = arraylist.get(i);

    itemHolder.title.setText(localItem.title);
    itemHolder.artist.setText(localItem.artistName);


    setOnPopupMenuListener(itemHolder, i);

}

private void setOnPopupMenuListener(ItemHolder itemHolder, final int position) {

    itemHolder.popupMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context wrapper = new ContextThemeWrapper(mContext, R.style.PopupMenu);
            final PopupMenu menu = new PopupMenu(wrapper, v);

            menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.popup_play:

                            break;
                        case R.id.popup_next:

                            break;

                    }
                    return false;
                }
            });
            menu.inflate(R.menu.popup_song);

            menu.show();
        }
    });
}

Please help me with it.

0ndre_
  • 3,577
  • 6
  • 26
  • 44
Kushal Patil
  • 205
  • 1
  • 2
  • 14

1 Answers1

0

After reading comments, you need a contextual menu.

Inherit your PopupMenu from Widget.PopupMenu.

   <style name="AppTheme.PopupMenu" parent="@android:style/Widget.PopupMenu">
        <item name="android:popupBackground">@color/yourcolor</item>
    </style>

I would suggest wrap your toolbar in AppBarLayout and in AppBarLayout theme set your menu style.

 <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/app_bar"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </android.support.design.widget.AppBarLayout>

Here are styles.

   <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Light">
        <!-- text color for toolbar and popup menu-->
        <item name="android:textColorPrimary">@color/colorAccent</item>
        <item name="popupMenuStyle">@style/AppTheme.PopupMenu</item>
        <item name="android:popupMenuStyle">@style/AppTheme.PopupMenu</item>
    </style>

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark" />

    <style name="AppTheme.PopupMenu" parent="@android:style/Widget.PopupMenu">
        <!-- background color of popup menu-->
        <item name="android:popupBackground">@color/colorBlack</item>
    </style>

Finally, create your popup menu with AppBarLayout context.

   AppBarLayout bar= (AppBarLayout) findViewById(R.id.app_bar);
        PopupMenu p = new PopupMenu(bar.getContext(), findViewById(item.getItemId()));

For more information, read this answer.

Community
  • 1
  • 1
mallaudin
  • 4,744
  • 3
  • 36
  • 68