还是万恶的大作业,由于之前的侧滑搞得逻辑太复杂,控件之间相互干扰太多,所以准备弃用侧滑,改用fragment来做,这样不管是在逻辑上还是之后的维护上都会有很大的提升。当然,弊端还是有的,一是没有侧滑看起来那么炫,二是。。长得太tm像微信了,因为就是仿照微信做的(别打脸)。这里感谢imooc的hyman老师,就是在他的视频教学下我学会了做这样的界面。
撤了一堆没用的,现在开始正题吧,首先先分析一下微信的界面。从上往下依次分别是titlebar,内容区域,底部切换区域。我们再实现这个界面的时候也是分这三部分来实现的,下面我就分别说一下各部分怎么做。
一、TitleBar
在这里我们选用ActionBar来实现TitleBar,ActionBar是Google在安卓3.0之后引入的新功能,目的是为了取代之前的标题栏,提供更加丰富的导航效果。3.0以后的系统已经默认在Activity中添加了actionbar,不需要再另外引入。
首先,我们在res/menu下静态的定义一下menu的item,取名叫main.xml,大家稍微注意下第一个item,这里引入了一个widget,是searchview,这也是系统的一个控件,能够优化搜索界面和操作,用起来跟平常的edittext有点像,建议大家Google或者百度一下。这里有个属性showasaction,ifroom是如果控件足够,就会显示出来,collapseActionView是将它折叠,也就是上面那张图的那个放大镜的效果,如果点一下可以展开
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/actionbar_search_icon"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/action_search"/>
<item
android:id="@+id/action_add_friend"
android:icon="@drawable/menu_add_icon"
android:title="@string/menu_addfriend"/>
<item
android:id="@+id/action_scan"
android:icon="@drawable/men_scan_icon"
android:title="@string/menu_scan"/>
<item
android:id="@+id/action_feedback"
android:icon="@drawable/menu_feedback_icon"
android:title="@string/menu_feedback"/>
</menu>
然后再Activity中的onCreateOptionMenu方法中去绑定一下
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
到这一步,如果去看那个titilebar的话,大家有可能会发现,只有那个放大镜的图标,而没有另外三个,这该怎么办?系统默认是不现实overflow的图标的,如果要显示的话,我们需要进行强制显示。这个是什么原理呢?我只知道用的是反射。。具体机制我再学习下
private void setOverflowButtonAlways() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKey = ViewConfiguration.class
.getDeclaredField("sHasPermanentMenuKey");
menuKey.setAccessible(true);
menuKey.setBoolean(config, false);
} catch (Exception e) {
e.printStackTrace();
}
}