我有一个包含CardViews的RecyclerView。
我想为每个看起来和行为都像主工具栏的CardView添加一个工具栏:
[图标] [标题] .......... [按钮] [按钮] [菜单]
我从这里看到(http://blog.grafixartist.com/create-a-card-toolbar/)可以在CardView中设置一个实际的android.support.v7.widget.Toolbar对象。但它依赖于setSupportActionBar(...)来夸大菜单并响应操作。
您是否认为可以在我的每个CardView中重现该行为?
答案 0 :(得分:4)
对于带有工具栏的卡片视图,您不需要setSupportActionBar
,直到您需要设置一些ActionBar特定操作上/后导航操作。
看看这个很好的例子(链接到下面的整个页面):
感谢Gabriele的所有帮助。这是工作代码:
活动:
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mai); Toolbar toolbar = (Toolbar) findViewById(R.id.card_toolbar); toolbar.setTitle("Card Toolbar"); if (toolbar != null) { // inflate your menu toolbar.inflateMenu(R.menu.main); toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { return true; } }); } Toolbar maintoolbar = (Toolbar) findViewById(R.id.toolbar_main); if (toolbar != null) { // inflate your menu maintoolbar.inflateMenu(R.menu.main); maintoolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { return true; } }); } } }
布局XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar_main" android:layout_width="match_parent" android:layout_height="@dimen/action_bar_size_x2" android:background="@android:color/holo_orange_dark" android:minHeight="?attr/actionBarSize" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar_main" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="@dimen/action_bar_size" android:orientation="vertical" > <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v7.widget.Toolbar android:id="@+id/card_toolbar" android:layout_width="match_parent" android:layout_height="@dimen/action_bar_size" android:background="@android:color/white" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/darker_gray" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="@string/app_name" android:textSize="24sp" /> </LinearLayout> </android.support.v7.widget.CardView> </LinearLayout> </RelativeLayout>
确保您的活动主题正在延伸
Theme.AppCompat.Light.NoActionBar
。以下是它的样子:
很少有注意事项:
- 如果您正在使用卡片提升,那么您需要将边距顶上,以便您的卡片与主工具栏对齐
- 我仍然看到主工具栏和卡片工具栏底部之间有1-2个像素边距。在这种情况下不确定该怎么做。现在,我 正在手动对齐。
请注意,这篇文章的作者根本没有使用它,所以我很确定你也不需要它来实现你的想法
希望有所帮助
答案 1 :(得分:1)
不确定。 setSupportActionBar
用于设置setTitle
,菜单通胀和上/下操作的目标。您可以在任意位置使用工具栏,而无需使用setSupportActionBar
。它的行为就像一个ViewGroup。
答案 2 :(得分:0)
以前的答案是正确的,但我想提一下,有时菜单项会重复。为了解决这个问题,您需要通过调用%.
来清除每个CardView
的工具栏菜单