知乎是一个我比较喜欢的app,里面的内容也很好。因为自己在学习android,所以就想仿一下,看一下自己能不能实现。做了半个月,大体上实现了一下其中的功能,下面是简单的操作,(不要注意细节 - -|||)
是不是已经很像了。里面的数据是调用远程数据库中的数据,没有在手机中使用本地数据库。做程序累所以找了一些不让自己累的数据。哇哈哈。。。。。。
下面我就一步一步的把我做的每一个过程记录下来,算是对学习 android的一个笔记吧。
这里使用了android 5.0的一些控件,所以SDK我升级到了22。也许有人会说,这样是不是有一些低版本的手机就使用不了呢,这些新的控件官方说明是兼容到2.1。所以我感觉这个应该不是问题。
好了,我们先把一进来的首页架起来。这里面使用了Toolbar控件,DrawerLayout控件。
为什么使用toolbar而不使用 actionBar 呢。这里面有两个原因,一是google说toolbar是取代actionbar的,而且比 actionbar更灵活。另一个,看到左上角哪个可动的图标了吗,用toolbar可以直接就实现了,不用第三方插件了。
DrawerLayout的使用,主要是为了,可以从左侧拉出菜单来。
下面我就一步一步的把这个实现出来。
先来看一下activity_main.xml文件:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_main" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--toolbar菜单--> <include layout="@layout/toolbar" /> <!-- 内容界面 --> <FrameLayout android:id="@+id/frame_main" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <!-- 侧滑菜单内容 --> <fragment android:id="@+id/navigation_drawer" android:name="com.example.cg.zhihu_one.tool_NavigationDrawerFragment" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" /> </android.support.v4.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.ActionBar"> </android.support.v7.widget.Toolbar>
<resources> <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- toolbar(actionbar)颜色 --> <item name="colorPrimary">@color/titleBlue</item> <!-- 状态栏颜色 --> <item name="colorPrimaryDark">#3A5FCD</item> <!--toolbar文字的颜色--> <item name="@android:textColorPrimary">@android:color/white</item> <!-- 窗口的背景颜色 --> <item name="android:windowBackground">@android:color/white</item> <!--toolbar上菜单文字的颜色--> <item name="actionMenuTextColor">#ffffff</item> </style> </resources>
样式加完,我们在AndroidManifest.xml中添加此样式
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme" >我们再来看一下,侧滑菜单的布局与代码。这里说一句啊。正常这个侧滑布局我们应该使用android.support.design.widget.NavigationView,它是google给我们提供的一个官方控件,非常的好用,使用也简单,但是它有几个问题,我一直没有解决,一是,菜单上的图标,不管你用什么色的,显示全是灰的。二是如果你加了<item android:title="Sub items">,它会在一直显示这个title,如果你把这个title去掉,它是不显示这个文字了,可是相应的位置还是被留了出来,空了好大一块,所以这里只好自己去写一个布局。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ffffff"> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="2" android:orientation="vertical" android:background="#3A5FCD"> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="3"> <com.example.cg.zhihu_one.untils.CircleImageView android:layout_width="50dp" android:layout_height="50dp" android:layout_margin="10dp" android:src="@drawable/img_empty_followers" app:border_width="1dp" app:border_color="@color/white" ></com.example.cg.zhihu_one.untils.CircleImageView> </LinearLayout> <TextView android:id="@+id/txt_main_drawer_UserNick" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:text="我本无名" android:textColor="#ffffff" android:layout_marginTop="10dp" android:layout_marginLeft="10dp"/> <TextView android:id="@+id/txt_main_drawer_UserProfile" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:text="码农" android:textSize="@dimen/main_drawer_small" android:textColor="#ffffff" android:layout_marginTop="5dp" android:layout_marginLeft="10dp"/> </LinearLayout> <ListView android:id="@+id/lv_main_drawer_leftmenu" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="6" android:background="#fff" android:choiceMode="singleChoice" android:layout_marginTop="5dp" android:divider="@null" android:scrollbars="none"></ListView> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="2" android:background="#fff" android:layout_marginTop="5dp" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"> <ImageView android:layout_width="fill_parent" android:layout_height="1dp" android:background="@color/grey"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="4" android:background="@drawable/main_drawer_background" android:clickable="true" android:gravity="center_vertical"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:text="切换主题" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textColor="@drawable/main_drawer_text_color" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="4" android:background="@drawable/main_drawer_background" android:clickable="true" android:gravity="center_vertical"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:text="设置" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textColor="@drawable/main_drawer_text_color"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"></LinearLayout> </LinearLayout> </LinearLayout>
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import android.util.AttributeSet; import android.widget.ImageView; import com.example.cg.zhihu_one.R; /** * Created by cg on 2015/8/26. */ public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; private static final int COLORDRAWABLE_DIMENSION = 2; private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; private static final boolean DEFAULT_BORDER_OVERLAY = false; private final RectF mDrawableRect = new RectF(); private final RectF mBorderRect = new RectF(); private final Matrix mShaderMatrix = new Matrix(); private final Paint mBitmapPaint = new Paint(); private final Paint mBorderPaint = new Paint(); private int mBorderColor = DEFAULT_BORDER_COLOR; private int mBorderWidth = DEFAULT_BORDER_WIDTH; private Bitmap mBitmap; private BitmapShader mBitmapShader; private int mBitmapWidth; private int mBitmapHeight; private float mDrawableRadius; private float mBorderRadius; private ColorFilter mColorFilter; private boolean mReady; private boolean mSetupPending; private boolean mBorderOverlay; public CircleImageView(Context context) { super(context); init(); } public CircleImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CircleImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH); mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR); mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_border_overlay, DEFAULT_BORDER_OVERLAY); a.recycle(); init(); } private void init() { super.setScaleType(SCALE_TYPE); mReady = true; if (mSetupPending) { setup(); mSetupPending = false; } } @Override public ScaleType getScaleType() { return SCALE_TYPE; } @Override public void setScaleType(ScaleType scaleType) { if (scaleType != SCALE_TYPE) { throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType)); } } @Override public void setAdjustViewBounds(boolean adjustViewBounds) { if (adjustViewBounds) { throw new IllegalArgumentException("adjustViewBounds not supported."); } } @Override protected void onDraw(Canvas canvas) { if (getDrawable() == null) { return; } canvas.drawCircle(getWidth() / 2, getHeight() / 2, mDrawableRadius, mBitmapPaint); if (mBorderWidth != 0) { canvas.drawCircle(getWidth() / 2, getHeight() / 2, mBorderRadius, mBorderPaint); } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); setup(); } public int getBorderColor() { return mBorderColor; } public void setBorderColor(int borderColor) { if (borderColor == mBorderColor) { return; } mBorderColor = borderColor; mBorderPaint.setColor(mBorderColor); invalidate(); } public void setBorderColorResource(@ColorRes int borderColorRes) { setBorderColor(getContext().getResources().getColor(borderColorRes)); } public int getBorderWidth() { return mBorderWidth; } public void setBorderWidth(int borderWidth) { if (borderWidth == mBorderWidth) { return; } mBorderWidth = borderWidth; setup(); } public boolean isBorderOverlay() { return mBorderOverlay; } public void setBorderOverlay(boolean borderOverlay) { if (borderOverlay == mBorderOverlay) { return; } mBorderOverlay = borderOverlay; setup(); } @Override public void setImageBitmap(Bitmap bm) { super.setImageBitmap(bm); mBitmap = bm; setup(); } @Override public void setImageDrawable(Drawable drawable) { super.setImageDrawable(drawable); mBitmap = getBitmapFromDrawable(drawable); setup(); } @Override public void setImageResource(@DrawableRes int resId) { super.setImageResource(resId); mBitmap = getBitmapFromDrawable(getDrawable()); setup(); } @Override public void setImageURI(Uri uri) { super.setImageURI(uri); mBitmap = getBitmapFromDrawable(getDrawable()); setup(); } @Override public void setColorFilter(ColorFilter cf) { if (cf == mColorFilter) { return; } mColorFilter = cf; mBitmapPaint.setColorFilter(mColorFilter); invalidate(); } private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; } if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } try { Bitmap bitmap; if (drawable instanceof ColorDrawable) { bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); } else { bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } catch (OutOfMemoryError e) { return null; } } private void setup() { if (!mReady) { mSetupPending = true; return; } if (mBitmap == null) { return; } mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mBitmapPaint.setAntiAlias(true); mBitmapPaint.setShader(mBitmapShader); mBorderPaint.setStyle(Paint.Style.STROKE); mBorderPaint.setAntiAlias(true); mBorderPaint.setColor(mBorderColor); mBorderPaint.setStrokeWidth(mBorderWidth); mBitmapHeight = mBitmap.getHeight(); mBitmapWidth = mBitmap.getWidth(); mBorderRect.set(0, 0, getWidth(), getHeight()); mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2, (mBorderRect.width() - mBorderWidth) / 2); mDrawableRect.set(mBorderRect); if (!mBorderOverlay) { mDrawableRect.inset(mBorderWidth, mBorderWidth); } mDrawableRadius = Math.min(mDrawableRect.height() / 2, mDrawableRect.width() / 2); updateShaderMatrix(); invalidate(); } private void updateShaderMatrix() { float scale; float dx = 0; float dy = 0; mShaderMatrix.set(null); if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) { scale = mDrawableRect.height() / (float) mBitmapHeight; dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f; } else { scale = mDrawableRect.width() / (float) mBitmapWidth; dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f; } mShaderMatrix.setScale(scale, scale); mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); mBitmapShader.setLocalMatrix(mShaderMatrix); } }
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CircleImageView"> <attr name="border_width" format="dimension" /> <attr name="border_color" format="color" /> <attr name="border_overlay" format="boolean" /> </declare-styleable> </resources>
2,菜单使用listView,代码如下:listview中的item页面代码:
fragment_main_drawer_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:gravity="center_vertical" android:background="@drawable/main_drawer_background" android:orientation="horizontal"> <ImageView android:id="@+id/item_icon" android:layout_marginRight="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textColor="@drawable/main_drawer_text_color" android:gravity="center_vertical" /> </LinearLayout>
这里面的android:background="@drawable/main_drawer_background"主要是在点击菜单时,改变背景色
main_drawer_background.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@color/grey" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@color/grey" /> <item android:drawable="@android:color/transparent" /> </selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:color="#ff999999"/>
<item
android:state_activated="true"
android:color="@android:color/white" />
<item
android:color="#636363" /></selector>
现在item已经有了,哪么我们就为这个菜单列表写一个adapter
Main_Drawer_lv_Adapter.java
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.cg.zhihu_one.R; import com.example.cg.zhihu_one.models.MainDrawerMenu; import java.util.List; /** * 左侧侧滑菜单的adpter * Created by cg on 2015/10/26. */ public class Main_Drawer_lv_Adapter extends BaseAdapter { private LayoutInflater inflater; private List<MainDrawerMenu> list_menu; //菜单名称与图标的list,采用了一个类 public Main_Drawer_lv_Adapter(Context context,List<MainDrawerMenu> list_menu) { inflater = LayoutInflater.from(context); this.list_menu = list_menu; } @Override public int getCount() { return list_menu.size(); } @Override public Object getItem(int position) { return list_menu.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { menuItem mItem; if(convertView==null) { convertView = inflater.inflate(R.layout.fragment_main_drawer_item,null); mItem = new menuItem(); mItem.icon = (ImageView)convertView.findViewById(R.id.item_icon); mItem.title = (TextView)convertView.findViewById(R.id.item_title); convertView.setTag(mItem); }else{ mItem = (menuItem)convertView.getTag(); } mItem.icon.setImageResource(list_menu.get(position).getMainDrawer_icon()); mItem.title.setText(list_menu.get(position).getMainDrawer_menuName()); return convertView; } public class menuItem { ImageView icon; TextView title; } }
这里面为了将图标和文字传入,我建立了一个model类。MainDrawerMenu.java
/** * 左侧侧滑菜单内容类 * Created by cg on 2015/10/23. */ public class MainDrawerMenu { private int mainDrawer_icon; //菜单的图标 private String mainDrawer_menuName; //菜单的名称 public MainDrawerMenu() { } public MainDrawerMenu(int mainDrawer_icon, String mainDrawer_menuName) { this.mainDrawer_icon = mainDrawer_icon; this.mainDrawer_menuName = mainDrawer_menuName; } /** * 得到菜单图标 * @return */ public int getMainDrawer_icon() { return mainDrawer_icon; } /** * 设置菜单图标 * @param mainDrawer_icon */ public void setMainDrawer_icon(int mainDrawer_icon) { this.mainDrawer_icon = mainDrawer_icon; } /** * 得到菜单名称 * @return */ public String getMainDrawer_menuName() { return mainDrawer_menuName; } /** * 设置菜单名称 * @param mainDrawer_menuName */ public void setMainDrawer_menuName(String mainDrawer_menuName) { this.mainDrawer_menuName = mainDrawer_menuName; } }
现在布局有了,圆形图搞定,listview的item布局和adapter也完事了,下面就把这些整合起来吧.tool_NavigationDrawerFragment.java
import android.app.Fragment; import android.content.res.TypedArray; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import com.example.cg.zhihu_one.Adapters.Main_Drawer_lv_Adapter; import com.example.cg.zhihu_one.models.MainDrawerMenu; import java.util.ArrayList; import java.util.List; /** * 左侧侧滑页面 * Created by cg on 2015/10/23. */ public class tool_NavigationDrawerFragment extends Fragment { private ListView lv_main_drawer_leftmenu; //定义菜单的listView private List<MainDrawerMenu> list_menu; /** * 设置菜单点击接口,以方便外部Activity调用 */ public interface menuClickListener { void menuClick(String menuName); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main_drawer,container,false); initleftMenuContral(view); return view; } /** * 初始化左侧菜单列表listView,并为菜单,设置点击事件 * @param view */ private void initleftMenuContral(View view) { lv_main_drawer_leftmenu = (ListView)view.findViewById(R.id.lv_main_drawer_leftmenu); list_menu = getMenuItem(); lv_main_drawer_leftmenu.setAdapter(new Main_Drawer_lv_Adapter(getActivity(),list_menu)); lv_main_drawer_leftmenu.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(getActivity() instanceof menuClickListener) { ((menuClickListener)getActivity()).menuClick(list_menu.get(position).getMainDrawer_menuName()); } } }); } /** * 从arrays.xml中取出数据,装入list<T>中 * @return */ private List<MainDrawerMenu> getMenuItem() { List<MainDrawerMenu> list_menu = new ArrayList<MainDrawerMenu>(); String[] itemTitle = getResources().getStringArray(R.array.item_title); TypedArray itemIconRes = getResources().obtainTypedArray(R.array.item_icon_res); for(int i=0;i<itemTitle.length;i++) { MainDrawerMenu lmi = new MainDrawerMenu(); lmi.setMainDrawer_icon(itemIconRes.getResourceId(i,0)); lmi.setMainDrawer_menuName(itemTitle[i]); list_menu.add(lmi); } return list_menu; } }
这里说明一点,这里的菜单名和图标,我采用的是在values文件夹建立了一个arrays.xml文件,把这些值写在了这里。
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="item_title"> <item>首页</item> <item>发现</item> <item>关注</item> <item>收藏</item> <item>草稿</item> <item>提问</item> </string-array> <integer-array name="item_icon_res"> <item>@drawable/ic_drawer_home_normal</item> <item>@drawable/ic_drawer_explore_normal</item> <item>@drawable/ic_drawer_follow_normal</item> <item>@drawable/ic_drawer_collect_normal</item> <item>@drawable/ic_drawer_draft_normal</item> <item>@drawable/ic_drawer_question_normal</item> </integer-array> </resources>
到这里,我们的toolbar,左侧菜单都已经建立完成了,我们来运行一下看一下效果。
左侧菜单没问题,已经实现了我们的想法,可是这个toolbar上面,处了背景色以外,什么都没有,这是什么情况呢,这是因为我们还没有给toolbar进行设置,好了, 我们来看一下MainActivity.java的代码.
import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { private Toolbar toolbar; //定义toolbar private ActionBarDrawerToggle mDrawerToggle; //定义toolbar左上角的弹出左侧菜单按钮 private DrawerLayout drawer_main; //定义左侧滑动布局,其实就是主布局 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initToolbar(); } /** * 初始化Toolbar,并设置Toolbar中的菜单与标题,并与DrawerLayout.DrawerListener相关联,设置动态图标 */ public void initToolbar() { toolbar = (Toolbar)this.findViewById(R.id.toolbar); toolbar.setTitle("首页"); // 标题的文字需在setSupportActionBar之前,不然会无效 setSupportActionBar(toolbar); //为了生成,工具栏左上角的动态图标,要使用下面的方法 drawer_main = (DrawerLayout) findViewById(R.id.drawer_main); mDrawerToggle = new ActionBarDrawerToggle(this, drawer_main, toolbar, R.string.drawer_open, R.string.drawer_close); mDrawerToggle.syncState(); drawer_main.setDrawerListener(mDrawerToggle); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id. main_toolbar_shuffle) { return true; } return super.onOptionsItemSelected(item); } }
这里,我们还要在menu_main.xml中设置在toolbar上的菜单,代码如下:
<menu 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" tools:context=".MainActivity"> <item android:id="@+id/main_toolbar_shuffle" android:title="@string/menu_shuffle" android:icon="@drawable/ic_action_shuffle" app:showAsAction="always" /> <item android:id="@+id/main_toolbar_search" android:title="@string/menu_search" android:icon="@drawable/ic_action_search" app:showAsAction="always"/> <item android:id="@+id/main_toolbar_notify" android:title="@string/menu_notify" android:icon="@drawable/ic_action_notify" app:showAsAction="always" /> <item android:id="@+id/main_toolbar_about" android:title="@string/menu_about" app:showAsAction="never" /> <item android:id="@+id/main_toolbar_register" android:title="@string/menu_register" app:showAsAction="never" /> </menu>
<string name="menu_index">首页</string> <string name="menu_search">查询</string> <string name="menu_notify">通知</string> <string name="menu_about">关于</string> <string name="menu_register">登出</string> <string name="menu_share">分享</string> <string name="menu_shuffle">随机看</string>
好了,这回我们再运行一下,看一下效果:
下载地址:http://download.csdn.net/detail/chenguang79/9215873