2016-05-31 30 views
1

我正在尝试为我的项目菜单创建自定义布局。我需要一个形象的图标,显示购物车是这样的:工具栏中的自定义菜单项

image

我创建一个自定义的相对布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="48dp" 
    android:layout_height="fill_parent" 
    android:layout_gravity="right" > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:clickable="true" 
     android:src="@drawable/ic_shopping_cart"/> 

    <TextView 
     android:id="@+id/counter" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:padding="8dp" 
     android:text="5" 
     android:textSize="15sp" 
     android:textColor="#ffffff" /> 

</RelativeLayout> 

和项目菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/icon_shopping_cart" 
     android:actionLayout="@layout/shopping_cart" 
     android:title="@string/shopping_icon_description" 
     app:showAsAction="always" /> 
</menu> 

有谁知道该怎么做?

在此先感谢

编辑:

MainActivity.java

public class Prueba extends AppCompatActivity { 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     toolbar.inflateMenu(R.id.shopping_cart); 

    } 

} 

回答

1

如果你想在工具栏柜台尝试ActionBarMenuItemCounter,它为我工作

private Drawable buildCounterDrawable(int count, int backgroundImageId) { 
LayoutInflater inflater = LayoutInflater.from(this); 
View view = inflater.inflate(R.layout.counter_menuitem_layout, null); 
view.setBackgroundResource(backgroundImageId); 

if (count == 0) { 
    View counterTextPanel = view.findViewById(R.id.counterValuePanel); 
    counterTextPanel.setVisibility(View.GONE); 
} else { 
    TextView textView = (TextView) view.findViewById(R.id.count); 
    textView.setText("" + count); 
} 

view.measure(
     View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
     View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 

view.setDrawingCacheEnabled(true); 
view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); 
view.setDrawingCacheEnabled(false); 

return new BitmapDrawable(getResources(), bitmap); 
} 
+0

谢谢,它的工作 – eligonz

+0

@eligonz很高兴帮助你快乐的编码:) –

0

我想你的街上购物车保存为图像,并实现你的菜单布局如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/icon_shopping_cart" 
     android:icon="@drawable/shopping_cart" 
     android:title="@string/shopping_icon_description" 
     android:showAsAction="always" /> 
</menu> 

并膨胀它你的活动/片段:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.menu_layout, menu); 

} 
+0

我并不完全需要,因为购物车的数量可以修改。 – eligonz

+0

究竟是什么问题?菜单布局不显示? – hopeman

+0

图标显示,但我不知道如何动态地在图标中添加数字。 – eligonz

0

您的设置是正确的,现在只有下面是你需要的东西..

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.your_menu_file, menu); 

     final MenuItem item = menu.findItem(R.id.icon_shopping_cart); 
     TextView cartCount = (TextView) item.getActionView().findViewById(R.id.counter); 
     cartCount.setText("10"); 
     return true; 
    } 

,并删除此行 toolbar.inflateMenu(R.id.shopping_cart);

happyCoding;

+0

它返回java.lang.NullPointerException:尝试调用虚拟方法'android.view.View android.view.View.findViewById(int)'null TextView行的对象引用 – eligonz

+0

请确保您正在为右侧菜单文件充气。NPE因为可能是viewid或布局未找到。 – Bharatesh