Android学习笔记之高仿微信界面实现

还是万恶的大作业,由于之前的侧滑搞得逻辑太复杂,控件之间相互干扰太多,所以准备弃用侧滑,改用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();
		}
	}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值