آموزش ساخت Navigation Drawer متریال دیزاین در برنامه نویسی اندروید

امتیاز 4.00 ( 3 رای )

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت Navigation Drawer متریال دیزاین در برنامه نویسی اندروید می پردازیم در ادامه با ما همراه باشید.
در این جا ما 3 تا فرگمنت داریم که کاربر با کلیک کردن منو وانتخاب یکی از sub منو ها وارد آن فرگمنت ها میشه بدون افکت باز شدن اکتیویتی یعنی عملی شبیه به tab اتفاق می افتد. و ما برای بهتر شدن پروژه (متریال شدنش) از recyclerView نیز استفاده کردیم.
پس مثل همیشه وارد build.gradle شده (module) و در بخش dependencies کتاب خانه های زیر را اضافه کنید.

compile 'com.android.support:recyclerview-v7:22.2.+'

سپس پروژه را sync کنید علت خطاهای گریدل را قبلا بررسی کرده ایم.
در ایتدا باید فایل های مربوط به layout و Navigation Drawer و فرگمنت ها را ایجاد می کنیم.
پس فایل activity_main.xml ما همانند زیر می شود.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:id="@+id/container_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar" />
        </LinearLayout>
        <FrameLayout
            android:id="@+id/container_body"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
    <fragment
        android:id="@+id/fragment_navigation_drawer"
        android:name=".FragmentDrawer"
        android:layout_width="@dimen/nav_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"
        tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

همانطور که میبیند یک LinearLayout است در ابتدا که همان صفحه اصلی ما میشود سپس داخل آن یک LinearLayout دیگر قرار دادیم تا Toolbar را در آن جا بندازیم و FrameLayout هم صفحه اصلی میشه در زیر toolbar هر چیزی در آن قرار دهید با اجرای برنامه به شما نمایش داده می شود و در آخر هم یک fragment ایجاد کردیم و این فرگمنت ما سفارشی است پس باید یک فایل به نام fragment_navigation_drawer.xml درست کرده و کد های زیر را در آن قرار دهید.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">
    <RelativeLayout
        android:id="@+id/nav_header_container"
        android:layout_width="match_parent"
        android:layout_height="140dp"
        android:layout_alignParentTop="true"
        android:background="@color/colorPrimary">
        <ImageView
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:src="@drawable/ic_profile"
            android:scaleType="fitCenter"
            android:layout_centerInParent="true" />
    </RelativeLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/drawerList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/nav_header_container"
        android:layout_marginTop="15dp" />
</RelativeLayout>

کد بالا همون بخش menu رو درست می کنه یعنی وقتی روی menu کلیک کنید Navigation در آور باز می شود و محتوایت آن می باشد که شامل یک عکس و یک RecyclerView است خود این Recyclerview سه بخش ایجاد می کند که با کلیک بروی آنها وارد فرگمنت های دیگه می شویم.
حالا باید ستون مربوط به Navigation Drawer رو درست کنیم پس یک فایل به نام nav_drawer_row.xml درست کنید کد زیر را در آن قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true">
    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="30dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:textSize="15dp"
        android:textStyle="bold" />
</RelativeLayout>

دوستان یادم رفت در ابتدا ما از Toolbar استفاده کردیم برای اینکه toolbar برای شما خطا ندهد در همان پوشه layout یک فایل به نام toolbar.xml درست کنید کد زیر رو در آن قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

تا اینجا بخشی از کار تموم شده حالا ما باید سه تا فرگمنت درست کنیم این فرگمنت های میشه Layout هر کدام از منو ها یعنی وقتی وارد منو شدید سه تا آیتم میبینید با کلیک روی هر کدام یکی از این فرگمنت ها باز می شود.
پس فرگمنت هایی به نام fragment_friends.xml , fragment_home.xml و fragment_messages.xml ایجاد کنید.
پس فایل fragment_home.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:orientation="vertical"
    tools:context=".HomeFragment">
    <TextView
        android:id="@+id/label"
        android:layout_alignParentTop="true"
        android:layout_marginTop="100dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="45dp"
        android:text="HOME"
        android:textStyle="bold"/>
    <TextView
        android:layout_below="@id/label"
        android:layout_centerInParent="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="12dp"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:text="Edit fragment_home.xml to change the appearance" />
</RelativeLayout>

و فایل fragment_friends.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:orientation="vertical"
    tools:context=".FriendsFragment">
    <TextView
        android:id="@+id/label"
        android:layout_alignParentTop="true"
        android:layout_marginTop="100dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="45dp"
        android:text="FRIENDS"
        android:textStyle="bold"/>
    <TextView
        android:layout_below="@id/label"
        android:layout_centerInParent="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="12dp"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:text="Edit fragment_friends.xml to change the appearance" />
</RelativeLayout>

و در آخر fragment_messages.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:orientation="vertical"
    tools:context="info.androidhive.materialdesign.activity.MessagesFragment">
    <TextView
        android:id="@+id/label"
        android:layout_alignParentTop="true"
        android:layout_marginTop="100dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="45dp"
        android:text="MESSAGES"
        android:textStyle="bold"/>
    <TextView
        android:layout_below="@id/label"
        android:layout_centerInParent="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="12dp"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:text="Edit fragment_messages.xml to change the appearance" />
</RelativeLayout>

برویم به بخش کد برنامه برای handle کردن Navigation Drawer و بقیه کار ها ابتدا یک فایل به نام MainActivity.java ایجاد کنید کد زیر را در آن قرار دهید.

package ir.programchi;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import info.androidhive.materialdesign.R;
public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener {
    private static String TAG = MainActivity.class.getSimpleName();
    private Toolbar mToolbar;
    private FragmentDrawer drawerFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        drawerFragment = (FragmentDrawer)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);
        drawerFragment.setDrawerListener(this);
        displayView(0);
    }
    @Override
    public void onDrawerItemSelected(View view, int position) {
        displayView(position);
    }
    private void displayView(int position) {
        Fragment fragment = null;
        String title = getString(R.string.app_name);
        switch (position) {
            case 0:
                fragment = new HomeFragment();
                title = getString(R.string.title_home);
                break;
            case 1:
                fragment = new FriendsFragment();
                title = getString(R.string.title_friends);
                break;
            case 2:
                fragment = new MessagesFragment();
                title = getString(R.string.title_messages);
                break;
            default:
                break;
        }
        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_body, fragment);
            fragmentTransaction.commit();
            getSupportActionBar().setTitle(title);
        }
    }
}

در ابتدا view مربوط به toolbar را به دست آوردیم و از setSupportActionBar برای قرار دادن (فعال کردن) toolbar استفاده کردیم ولی به زبان ساده تولباری را که ساپورت می شود فعال می کند سپس view مربوط به Navigation drawer را که ساختیم به دست آوردیم از setUp برای فعال کردن باز شدن meni در زمانی که بروی toolbar کلیک شد استفاده کردیم و کد زیر

displayView(0);

باعث باز شدن تولبار در هنگام باز شدن اپ می شود.
از void که در بالا displayView نام دارد برای رفتن به فرگمنت های مختلف استفاده کردیم و برای بهتر شدن کار ما تایتل رو هم عوض می کنیم یعنی هر اکتیویتی که بریم Title مربوط به toolbar تغییر خواهد کرد.
از FragmentManager برای replace  کردن یک fragment جدید در هر بار استفاده کردیم. چون وقتی وارد اولین فرگمنت شوید اگر بخواهید وارد دومی شوید باید قبلی حذف شده و جدید جای آن را گیرد.
کد جاوای مربوط به فرگمنت Navigation Drawer هم همانند زیر می شود. پس یک فایل به نام FragmentDrawer.java ایجاد کرده و کد های زیر را در آن قرار دهید.

package ir.programchi;
/**
 * Created by Jefferson on 29/07/15.
 */
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
import ir.programchi.R;
import ir.programchi.NavigationDrawerAdapter;
import ir.programchi.NavDrawerItem;
public class FragmentDrawer extends Fragment {
    private static String TAG = FragmentDrawer.class.getSimpleName();
    private RecyclerView recyclerView;
    private ActionBarDrawerToggle mDrawerToggle;
    private DrawerLayout mDrawerLayout;
    private NavigationDrawerAdapter adapter;
    private View containerView;
    private static String[] titles = null;
    private FragmentDrawerListener drawerListener;
    public FragmentDrawer() {
    }
    public void setDrawerListener(FragmentDrawerListener listener) {
        this.drawerListener = listener;
    }
    public static List<NavDrawerItem> getData() {
        List<NavDrawerItem> data = new ArrayList<>();
        for (int i = 0; i < titles.length; i++) {
            NavDrawerItem navItem = new NavDrawerItem();
            navItem.setTitle(titles[i]);
            data.add(navItem);
        }
        return data;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // drawer labels
        titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflating view layout
        View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
        recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);
        adapter = new NavigationDrawerAdapter(getActivity(), getData());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {
            @Override
            public void onClick(View view, int position) {
                drawerListener.onDrawerItemSelected(view, position);
                mDrawerLayout.closeDrawer(containerView);
            }
            @Override
            public void onLongClick(View view, int position) {
            }
        }));
        return layout;
    }
    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) {
        containerView = getActivity().findViewById(fragmentId);
        mDrawerLayout = drawerLayout;
        mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar,"Opend","Closed") {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActivity().invalidateOptionsMenu();
            }
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActivity().invalidateOptionsMenu();
            }
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                toolbar.setAlpha(1 - slideOffset / 2);
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerToggle.syncState();
            }
        });
    }
    public static interface ClickListener {
        public void onClick(View view, int position);
        public void onLongClick(View view, int position);
    }
    static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
        private GestureDetector gestureDetector;
        private ClickListener clickListener;
        public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
            this.clickListener = clickListener;
            gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }
                @Override
                public void onLongPress(MotionEvent e) {
                    View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                    if (child != null && clickListener != null) {
                        clickListener.onLongClick(child, recyclerView.getChildPosition(child));
                    }
                }
            });
        }
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            View child = rv.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
                clickListener.onClick(child, rv.getChildPosition(child));
            }
            return false;
        }
        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
        }
        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
        }
    }
    public interface FragmentDrawerListener {
        public void onDrawerItemSelected(View view, int position);
    }
}

getData ایتم های Navigation Drawer را آماده می می کند.
setUp هم برای انجام عملیات ایجاد fragment و در بالا ما یک RecyclerView اگر یادتان باشید تعریف کردیم چون Recyclerview یک object خاص است باید از Touchevent استفاده کنیم تا زمانی که کاربر بروی ایتم های درون Recyclerview کلیک کرد ما بتوانیم position هر کدام از آنها را به دست آورده و fragment مربوط به آن را باز کنیم .
 
قبلا از اینکه ما کلاس بالا را ایجاد کنیم باید یک آداپتور و یک model ایجاد کنیم (علت ایجاد آنها را حدودا پنج بار گفته ایم می توانید در پست های قبلی آن را مطالعه کنید)

package ir.programchi;
/**
 * Created by Jeffetson on 29/07/15.
 */
import android.content.Context;
import android.view.LayoutInflater;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.Collections;
import java.util.List;
import ir.programchi.R;
import ir.programchi.NavDrawerItem;
public class NavigationDrawerAdapter extends RecyclerView.Adapter<NavigationDrawerAdapter.MyViewHolder> {
    List<NavDrawerItem> data = Collections.emptyList();
    private LayoutInflater inflater;
    private Context context;
    public NavigationDrawerAdapter(Context context, List<NavDrawerItem> data) {
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.data = data;
    }
    public void delete(int position) {
        data.remove(position);
        notifyItemRemoved(position);
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.nav_drawer_row, parent, false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        NavDrawerItem current = data.get(position);
        holder.title.setText(current.getTitle());
    }
    @Override
    public int getItemCount() {
        return data.size();
    }
    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.title);
        }
    }
}

و کد مربوط به به Model همانند زیر می شود پس یک فایل به نام NavDrawerItem.java ایجاد کنید کد زیر را در آن قرار دهید.

package ir.programchi;
/**
 * Created by Jefferson on 29/07/15.
 */
public class NavDrawerItem {
    private boolean showNotify;
    private String title;
    public NavDrawerItem() {
    }
    public NavDrawerItem(boolean showNotify, String title) {
        this.showNotify = showNotify;
        this.title = title;
    }
    public boolean isShowNotify() {
        return showNotify;
    }
    public void setShowNotify(boolean showNotify) {
        this.showNotify = showNotify;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

کد بالا به getter و setter معروف است.
بیشتر کار تمام شده است حالا فقط باید Fragment ها رو ایجاد کنیم.
یک فرگمنت به نام FriendsFragment.java ایجاد کنید کد زیر را در آن قرار دهید.

package ir.programchi;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import info.androidhive.materialdesign.R;
/**
 * Created by jefferson on 29/07/15.
 */
public class FriendsFragment extends Fragment {
    public FriendsFragment() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_friends, container, false);
        // Inflate the layout for this fragment
        return rootView;
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }
    @Override
    public void onDetach() {
        super.onDetach();
    }
}

کار خاصی در فرگمنت انجام نداده ایم در صورتی که کد بالا را متوجه نشدید آموزش فرگمنت در سایت هست.
فایل فرگمنت بعدی ما HomeFragment.java است پس کد زیر را در آن قرار دهید.

package ir.programchi;
/**
 * Created by jefferson on 29/07/15.
 */
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import info.androidhive.materialdesign.R;
public class HomeFragment extends Fragment {
    public HomeFragment() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        // Inflate the layout for this fragment
        return rootView;
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }
    @Override
    public void onDetach() {
        super.onDetach();
    }
}

و آخرین فرگمن ما که نامش برابر با MessagesFragment.java را ایجاد کرده و کدهای زیر را در آن قرار دهید.

package ir.programchi;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import info.androidhive.materialdesign.R;
/**
 * Created by jeffeston on 29/07/15.
 */
public class MessagesFragment extends Fragment {
    public MessagesFragment() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_messages, container, false);
        // Inflate the layout for this fragment
        return rootView;
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }
    @Override
    public void onDetach() {
        super.onDetach();
    }
}

کد های مربوط به فایل dimes.xml که در فولدر res/values قرار دارد در صوتی که وجود نداشت فایلی با همین نام ایجاد کنید.

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="nav_drawer_width">260dp</dimen>
</resources>

کد های مربوط به string.xml هم همانند زیر می باشد.

<resources>
    <string name="app_name">Material Design by orjinakteb.com</string>
    <string name="action_settings">Settings</string>
    <string name="action_search">Search</string>
    <string name="drawer_open">Open</string>
    <string name="drawer_close">Close</string>
    <string name="nav_item_home">Home</string>
    <string name="nav_item_friends">Friends</string>
    <string name="nav_item_notifications">Messages</string>
    <!-- navigation drawer item labels  -->
    <string-array name="nav_drawer_labels">
        <item>@string/nav_item_home</item>
        <item>@string/nav_item_friends</item>
        <item>@string/nav_item_notifications</item>
    </string-array>
    <string name="title_messages">Messages</string>
    <string name="title_friends">Friends</string>
    <string name="title_home">Home</string>
</resources>

 
 
این آموزش هم به پایان رسید.
 
موفق باشید.

مطالعه بیشتر