2016-11-21 64 views
1

我正在開發一個應用程序,其中有一個列表和一個彈出式菜單。但我的應用程序有黑色背景色,文字顏色是白色。但是我的彈出式菜單背景顏色是白色,文字顏色是白色。我嘗試了所有可能的方式,但它不起作用。這是我的代碼。彈出菜單樣式問題

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> 

下面是回收觀點適配器

@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(); 
     } 
    }); 
} 

請它幫助我。

回答

0

閱讀評論後,您需要一個contextual menu

Widget.PopupMenu繼承PopupMenu

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

我建議你換行工具欄AppBarLayoutAppBarLayout theme設置你的菜單樣式。

<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> 

這裏有風格。

<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> 

最後,創建與AppBarLayout上下文的彈出式菜單。

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

有關更多信息,請閱讀this答案。

+0

其列表視圖不隔離按鈕。你能幫助我嗎? –

+0

你是什麼意思列表視圖?和按鈕? '@android:style/Widget.PopupMenu'是Android的彈出式菜單樣式,它像列表一樣打開(如果你正在考慮這個) – mallaudin

+0

我有列表,其中有彈出式菜單。每一行都有列表。讓我拿。刪除,共享等每一行。在列表中創建了彈出窗口。您可以在我的代碼中看到有回收站適配器。這是有約束力的。 –