How to create a card toolbar using appcompat v7

后端 未结 2 1230
离开以前
离开以前 2020-12-02 15:04

I want to create a toolbar like the following image as proposed in the material design guidelines:

\"enter

相关标签:
2条回答
  • 2020-12-02 15:26

    You can obtain it using a Toolbar as ActionBar, a CardView and another Toolbar(standalone) inside the Card.

    For the Toolbar standalone inside a Card you can use something like this:

    <android.support.v7.widget.CardView>
    
       <LinearLayout>
    
            <Toolbar  android:id="@+id/card_toolbar" />
    
            //......
    
       </LinearLayout>
    
    </CardView>
    

    Then you can inflate your menu to obtain the icon actions.

     Toolbar toolbar = (Toolbar) mActivity.findViewById(R.id.card_toolbar);
       if (toolbar != null) {
             //inflate your menu    
             toolbar.inflateMenu(R.menu.card_toolbar);
             toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem menuItem) {
                             //.....
                        }
                    });
       }
    

    For the toolbar used as action bar and the main layout you can use:

    option1:

    <RelativeLayout>
    
        <toolbar/>  //Main toolbar 
    
        <View
            android:background="@color/primary_color"
            android:layout_height="@dimen/subtoolbar_height"/>
    
        <CardView /> //described above
    
    </RelativeLayout>
    

    Option2: An extended toolbar (as actionbar) and a CardView as described above playing with margins.

    0 讨论(0)
  • 2020-12-02 15:27

    Thanks Gabriele for all the help. Here is working code:

    Activity :

    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);
            if (toolbar != null) {
                // inflate your menu
                toolbar.inflateMenu(R.menu.main);
                toolbar.setTitle("Card Toolbar");
                toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        return true;
                    }
                });
            }
    
            Toolbar maintoolbar = (Toolbar) findViewById(R.id.toolbar_main);
            if (maintoolbar != null) {
                // inflate your menu
                maintoolbar.inflateMenu(R.menu.main);
                maintoolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        return true;
                    }
                });
            }
        }
    
    }
    

    Layout XML File:

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

    Make sure your activity theme is extending Theme.AppCompat.Light.NoActionBar.

    Here is what it will look like:

    enter image description here

    Few things to note:

    • If you are using card elevation then you need to alter the margin top so that your card aligns with the main toolbar.
    • I am still seeing 1-2 pixel margin between bottom of main toolbar and card toolbar. Not sure about what to do in this case. For now, I am aligning it manually.
    0 讨论(0)
提交回复
热议问题