热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android仿网易新闻主界面

主要是学习ActionBarDrawerLayoutActionBarDrawerToggle,很不错的教程,下面一步一步带你实现这个过程,有不足之处欢迎留言交流.下面先来一张效果

主要是学习ActionBar+DrawerLayout+ActionBarDrawerToggle,很不错的教程,下面一步一步带你实现这个过程,有不足之处欢迎留言交流.

下面先来一张效果图
这里写图片描述
根据图片分析,要实现的有侧边栏DrawerLayout,ActionBar的颜色和菜单以及ActionBarDrawerToggle的动画效果.
在这之前,Theme要改成带有ActionBar的主题

android:theme="@android:style/Theme.Holo.Light"

一:侧边栏-DrawerLayout

根据官方文档,DrawerLayout布局的第一个视图是activity的主视图,第二个是侧边栏视图
因此主布局可以如下这样

FrameLayout为主视图,include加载的则为左侧边栏,因此是start属性.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/mdrawlaout"android:layout_width="match_parent"android:layout_height="match_parent">"180dp"android:layout_height="match_parent"layout="@layout/drawer_layout_left"android:layout_gravity="start"android:clickable="true"/>.support.v4.widget.DrawerLayout>

左侧边栏的实现,这里用到一个开源项目circleimageview,可以设置圆形头像,很简单的使用.


<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"android:layout_width&#61;"match_parent"android:orientation&#61;"vertical"android:layout_height&#61;"match_parent"android:background&#61;"#ffffff"><de.hdodenhof.circleimageview.CircleImageView xmlns:app&#61;"http://schemas.android.com/apk/res-auto"android:id&#61;"&#64;&#43;id/circleimageview"android:layout_width&#61;"90dp"android:layout_height&#61;"90dp"android:layout_marginLeft&#61;"45dp"android:layout_marginTop&#61;"30dp"android:src&#61;"&#64;drawable/circlel_header"app:border_color&#61;"#ff0000"app:border_width&#61;"2dp" /><TextView
android:id&#61;"&#64;&#43;id/tv_item1"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:layout_marginTop&#61;"40dp"android:gravity&#61;"center"android:text&#61;"夜间工具"android:textSize&#61;"16sp" />
<TextView
android:id&#61;"&#64;&#43;id/tv_item2"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:layout_marginTop&#61;"30dp"android:gravity&#61;"center"android:text&#61;"绘画工具"android:textSize&#61;"16sp" />
<TextView
android:id&#61;"&#64;&#43;id/tv_item3"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:layout_marginTop&#61;"30dp"android:gravity&#61;"center"android:text&#61;"测试1"android:textSize&#61;"16sp" />
<TextView
android:id&#61;"&#64;&#43;id/tv_item4"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:layout_marginTop&#61;"30dp"android:gravity&#61;"center"android:text&#61;"测试2"android:textSize&#61;"16sp" />
LinearLayout>

二:ActionBar的配置

ActionBar配置主要用代码进行配置

//取得ActionBaractionBar &#61; getActionBar();//设置不显示标题actionBar.setDisplayShowTitleEnabled(false);//设置使用logoactionBar.setDisplayUseLogoEnabled(true);//设置logoactionBar.setLogo(R.drawable.netease_top);//设置ActionBar背景Drawable background &#61; getResources().getDrawable(R.drawable.top_bar_background);actionBar.setBackgroundDrawable(background);//设置是将应用程序图标转变成可点击图标,并添加返回按钮actionBar.setDisplayHomeAsUpEnabled(true);

其中背景色主要通过xml文件进行配置
R.drawable.top_bar_background


<shape xmlns:android&#61;"http://schemas.android.com/apk/res/android" ><solid android:color&#61;"&#64;color/top_title_bar_normal_backgrond_color"/>
shape>

top_title_bar_normal_backgrond_color


<resources><color name&#61;"red">#ff0000color><color name&#61;"gray">#bbbbbbcolor><color name&#61;"black">#000000color><color name&#61;"top_title_bar_normal_backgrond_color">#EB413Dcolor><color name&#61;"top_title_bar_button_press_background_color">#D83C38color>resources>

这样就能显示红色的了

三:menu菜单的设置

这里主要是修改menu_main.xml这个文件来设置,解析的话,as自动生成的onCreateOptionsMenu(Menu menu)会自动解析

"http://schemas.android.com/apk/res/android"><itemandroid:id&#61;"&#64;&#43;id/action_settings"android:icon&#61;"&#64;drawable/night_biz_pc_menu_icon"android:orderInCategory&#61;"1"android:title&#61;"&#64;string/app_name"android:showAsAction&#61;"always"/><itemandroid:id&#61;"&#64;&#43;id/action_btn01"android:icon&#61;"&#64;drawable/abc_ic_menu_moreoverflow_mtrl_alpha"android:orderInCategory&#61;"2"android:title&#61;"更多"android:showAsAction&#61;"always"><itemandroid:id&#61;"&#64;&#43;id/action_btn02"android:icon&#61;"&#64;drawable/biz_plugin_manage_weather"android:orderInCategory&#61;"100"android:title&#61;"11/13"android:showAsAction&#61;"never"/><itemandroid:id&#61;"&#64;&#43;id/action_btn03"android:icon&#61;"&#64;drawable/biz_plugin_manage_offline"android:orderInCategory&#61;"100"android:title&#61;"离线"android:showAsAction&#61;"never"/><itemandroid:id&#61;"&#64;&#43;id/action_btn04"android:icon&#61;"&#64;drawable/biz_plugin_manage_theme"android:orderInCategory&#61;"100"android:title&#61;"夜间"android:showAsAction&#61;"never"/><itemandroid:id&#61;"&#64;&#43;id/action_btn05"android:icon&#61;"&#64;drawable/biz_plugin_manage_search"android:orderInCategory&#61;"100"android:title&#61;"搜索"android:showAsAction&#61;"never"/><itemandroid:id&#61;"&#64;&#43;id/action_btn06"android:icon&#61;"&#64;drawable/biz_plugin_manage_qrcode"android:orderInCategory&#61;"100"android:title&#61;"扫一扫"android:showAsAction&#61;"never"/><itemandroid:id&#61;"&#64;&#43;id/action_btn07"android:icon&#61;"&#64;drawable/biz_plugin_manage_offline"android:orderInCategory&#61;"100"android:title&#61;"设置"android:showAsAction&#61;"never"/>item>

四:ActionBarDrawerToggle的实现

ActionBarDrawerToggle是一个开关&#xff0c;用于打开/关闭DrawerLayout抽屉,ActionBarDrawerToggle 提供了一个方便的方式来配合DrawerLayout和ActionBar&#xff0c;以实现推荐的抽屉功能。即点击ActionBar的home按钮&#xff0c;即可弹出DrawerLayout抽屉。在Activity中的两个回调函数中使用它&#xff1a;onConfigurationChangedonOptionsItemSelected调用ActionBarDrawerToggle.syncState() 在Activity的onPostCreate()中&#xff1b;指示&#xff0c;ActionBarDrawerToggle与DrawerLayout的状态同步&#xff0c;并将ActionBarDrawerToggle中的drawer图标&#xff0c;设置为ActionBar的Home-Button的icon

//设置DrawerLayout的点击事件
mdrawlayout.setDrawerListener(new MyAPPdrawerlistener());//设置抽屉开关
mActionBarDrawerToggle &#61; new ActionBarDrawerToggle(this,this.mdrawlayout,R.string.drawer_open,R.string.drawer_close);

/*** 该方法会自动和actionBar关联, 将开关的图片显示在了action上* 如果不设置&#xff0c;也可以有抽屉的效果&#xff0c;不过是默认的图标* &#64;param savedInstanceState*/&#64;Overrideprotected void onPostCreate(Bundle savedInstanceState) {super.onPostCreate(savedInstanceState);mActionBarDrawerToggle.syncState();}

/*** 当设备配置改变的时候* &#64;param newConfig*/&#64;Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);mActionBarDrawerToggle.onConfigurationChanged(newConfig);}

/*** 菜单点击事件* &#64;param item* &#64;return*/&#64;Overridepublic 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 &#61; item.getItemId();//noinspection SimplifiableIfStatementif (id &#61;&#61; R.id.action_settings) {return true;}//添加mActionBarDrawerToggle点击效果return mActionBarDrawerToggle.onOptionsItemSelected(item)||super.onOptionsItemSelected(item);}

最后在DrawerLayout的点击事件中配置ActionBarDrawerToggle跟随抽屉来改变即可

private class MyAPPdrawerlistener implements DrawerLayout.DrawerListener{&#64;Overridepublic void onDrawerSlide(View drawerView, float slideOffset) {mActionBarDrawerToggle.onDrawerSlide(drawerView, slideOffset);}&#64;Overridepublic void onDrawerOpened(View drawerView) {mActionBarDrawerToggle.onDrawerOpened(drawerView);}&#64;Overridepublic void onDrawerClosed(View drawerView) {mActionBarDrawerToggle.onDrawerClosed(drawerView);}&#64;Overridepublic void onDrawerStateChanged(int newState) {mActionBarDrawerToggle.onDrawerStateChanged(newState);}}

备注一些用到的知识:1.android:paddingLeft和android:layout_marginLeft区别&#xff1a;区别是android:layout_marginLef是设置整个布局离左边的距离,android:paddingLeft是设置布局里面的内容距离左边
2.android:gravity&#xff1a;设置的是控件自身上面的内容位置,android:layout_gravity&#xff1a;设置控件本身相对于父控件的显示位置
3.android:orderInCategory&#61;"1",actionbar里每个item的优先级&#xff0c;值越大优先级越低&#xff0c;actionbar地方不够就会放到overflow中
4.android studio导入github的项目的时候,直接把库复制到原代码下,然后在grade中添加作者给的引入语句即可

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。


转载于:https://www.cnblogs.com/-niuli/p/4856416.html


推荐阅读
author-avatar
雪影飘枫2502928577
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有