2017-08-15 14 views
0

私のアプリでアイテムの背景を変更する必要があり、それについて何も見つかりませんでした。私は引き出しのためにアイテム&メニューを使用しました。これで、タイトルバックグラウンドを変更する必要があります。私はListviewを使用する場合、私はそれを変更することができますが、私は今それには道があるかどうかを知りたいと思います。アイテムの背景を変更する

<item 
 
     android:checkable="false" 
 
     android:title="@string/account"> 
 
     <menu> 
 
      <item 
 
       android:id="@+id/nav_member" 
 
       android:icon="@drawable/ic_person_add_black_24dp" 
 
       android:title="@string/member" /> 
 
      <item 
 
       android:id="@+id/nav_pay" 
 
       android:icon="@drawable/ic_menu_credit_card_black_24dp" 
 
       android:title="@string/pay" /> 
 
      <item 
 
       android:id="@+id/nav_fanclub" 
 
       android:icon="@drawable/ic_menu_fanclub" 
 
       android:title="@string/fanclub" /> 
 
      <item 
 
       android:id="@+id/nav_introduction" 
 
       android:icon="@drawable/ic_menu_introduction" 
 
       android:title="@string/introduction" /> 
 
      <item 
 
       android:id="@+id/nav_cards" 
 
       android:icon="@drawable/ic_menu_cards" 
 
       android:title="@string/cards" /> 
 
      <item 
 
       android:id="@+id/nav_points" 
 
       android:icon="@drawable/ic_menu_points" 
 
       android:title="@string/points" /> 
 
     </menu> 
 
    </item>

答えて

0

ありがとう引き出しメニューあなたは、その最初の構想では、パラメータの不足のために古典的な方法デュでそれを行うことができない、悲しいことにカスタマイズすることはそれほど簡単ではありません。

あなたはまさに、このレイアウトでは、あなたのMyNavigationViewでは、独自のItemView拡張クラスNavigationMenuItemView

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    This layout should not be rename, It is use directly by design NavigationView component. 
--> 
<your.package.MyNavigationMenuItemView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/listPreferredItemHeightSmall" 
    android:paddingStart="?attr/listPreferredItemPaddingLeft" 
    android:paddingEnd="?attr/listPreferredItemPaddingRight" 
    android:foreground="?attr/selectableItemBackground" 
    android:focusable="true"/> 

を追加する必要があります「design_navigation_item.xml」

として名前layout.xmlを作成する必要があり、いくつかの操作を行いますクラスあなたが

public class MyNavigationMenuItemView extends NavigationMenuItemView { 

    private static final float MENU_ITEM_FONT_SIZE_SP = 14.0f; 

    private CheckedTextView mTextView; 

    public MyNavigationMenuItemView(Context context) { 
     this(context, null); 
    } 

    public MyNavigationMenuItemView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public MyNavigationMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     if (isInEditMode()) { 
      return; 
     } 
     mTextView = (CheckedTextView) findViewById(android.support.design.R.id.design_menu_item_text); 
    } 

    @Override 
    public void initialize(MenuItemImpl itemData, int menuType) { 
     super(itemData, menuType); 
     if (itemData.getTitle().equals("Some specific title") { 
      // Do specific style changes on textview 
     } 
    } 

    @Override 
    public void setTextAppearance(int textAppearance) { 
     // Text cutomization 
     mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, MENU_ITEM_FONT_SIZE_SP); 
     mTextView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.menuItemBackgroundColor)); 
    } 
} 
0

のようなメソッドをオーバーライドすることができますあなたはのgetActionViewメソッドを呼び出すことができますあなたが返信するのは、Viewです。私は例の下で行ったようにそのView上では、背景色を変えることができる -

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

    item.getActionView().setBackgroundColor(ContextCompat.getColor(this, 
              R.color.colorAccent)); 
    return super.onOptionsItemSelected(item); 
    } 
+0

をうまくあなたはアイテムが選択されるときの色を変更するためにそれをやりました。私は永久にそれを変更したい。 –

関連する問題