安卓微信文件夹里面default下面andorid.jpgdefault是什么文件夹

表情制作app手机表情软件
如今手机应用盛行的时代中,单纯用文本聊天似乎已经满足不了人们的需求了,文字表意的限性让语音短影片等信息载体有了更宽广的生长空间,从而产生了很多,,表情制作,那么如果你想制作出你自己喜欢的表情,请看看小编
&表情工厂是美图秀秀团队推
魔TA表情是一款手机动态表情制作
&表情工厂是美图秀秀团队推
3D头像制作BuddyPoke是一款基于3
微信官方推荐,超有趣微信QQ聊天
爆红的喵呜颜文字,正激萌来袭。
手机表情软件可以令你的聊天不只是文字图片语音,它可以让你的手机聊天软件加上动态表情,使你在聊天不再无聊。提供大量热门表情给你发送,下载就能让你的聊天不一样。下面小编为你推荐手机表情软件,希望能让你愉快
&&& 表情符号颜文
&表情工厂是美图秀秀团队推
微信官方推荐,超有趣微信QQ聊天
爆笑Q表情是一款手机搞笑表情软件
same是一款独创的表情语音,长按
表情豆豆是一款全网最全的表情专
微信表情大全 安卓版 3.9.6
下载帮助本站软件均来自互联网, 如有侵犯您的版权, 请与我们联系。
* 为了达到最快的下载速度,推荐使用下载本站软件。
* 请一定升级到最新版才能正常解压本站提供的软件!
* 相关网站事务请留言:
或通知我们!
Copyright &
. All Rights Reserved安卓开发笔记——多种方式实现底部菜单栏(仿微信界面)
安卓开发笔记——多种方式实现底部菜单栏(仿微信界面)
☆ 特别推荐:希望有缘来到小站的用户们,如果平时需要服务器主机托管,云服务,机房机柜带宽租用等,可以交个朋友,我叫董礼 QQ
真诚交友,用心服务,价格最低!
关于底部菜单是什么,我想没必要介绍了,在市场上的APP里太常见了,这里提供两种方式来实现。
记得之前写过几篇关于底部菜单实现的方法,有兴趣的朋友可以看看:
1、《安卓开发复习笔记&&TabHost组件(一)(实现底部菜单导航)》
2、《安卓开发复习笔记&&TabHost组件(二)(实现底部菜单导航)》
3、《安卓开发笔记&&Fragment+FragmentTabHost组件(实现新浪微博底部菜单)》
今天带来种相对更通俗易懂的写法,不再和过去一样去沿用TabHost了,这次我们直接用LinearLayout布局来实现,先来看下实现效果图:
中间内容区域有两种实现方式:
1、ViewPager  –可滑动界面      2、Fragment  –固定界面
1、界面分析
&这里有个小技巧,把底部菜单栏的每一个小的LinearLayout的宽度都设置成0dp,然后用weight权重去分配它,中间内容区域也是把高度设置成0dp,然后用weight权重去分配它。(weight默认是把界面里空闲的位置作为划分位置,所以这里的宽度或者高度要注意设置成0dp)
2、具体实现(内容区域为ViewPager可滑动界面)
布局文件:
activity_top.xml(顶部布局)
1 &RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@drawable/title_bar"&
android:layout_width="wrap_content"
android:layout_height="wrap_content" 10
android:layout_centerInParent="true" 11
android:text="微信" 12
android:textSize="20dp"
android:textColor="#ffffff"/& 14
15 &/RelativeLayout&
activity_bottom.xml(底部布局)
1 &LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bottom_bar" &
&LinearLayout
android:id="@+id/ll_home"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" &
&ImageView
android:id="@+id/iv_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab_weixin_pressed" /&
android:id="@+id/tv_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="首页"
android:textColor="#1B940A"
android:textStyle="bold" /&
&/LinearLayout&
&LinearLayout
android:id="@+id/ll_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" &
&ImageView
android:id="@+id/iv_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab_address_normal" /&
android:id="@+id/tv_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="通讯录"
android:textColor="#ffffff"
android:textStyle="bold" /&
&/LinearLayout&
&LinearLayout
android:id="@+id/ll_friend"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" &
&ImageView
android:id="@+id/iv_friend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab_find_frd_normal" /&
android:id="@+id/tv_friend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="朋友"
android:textColor="#ffffff"
android:textStyle="bold" /&
&/LinearLayout&
&LinearLayout
android:id="@+id/ll_setting"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" &
&ImageView
android:id="@+id/iv_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab_settings_normal" /&
android:id="@+id/tv_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="设置"
android:textColor="#ffffff" 100
android:textStyle="bold" /& 101
&/LinearLayout& 102
103 &/LinearLayout&
activity_main.xml(主布局,引入上下布局)
1 &LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
&include layout="@layout/activity_top" /&
&android.support.v4.view.ViewPager 10
android:id="@+id/vp_content" 11
android:layout_width="match_parent" 12
android:background="#ffffff" 13
android:layout_height="0dp" 14
android:layout_weight="1" & 15
&/android.support.v4.view.ViewPager& 16
&include layout="@layout/activity_bottom" /& 18
19 &/LinearLayout&
page_01.xml-page_04.xml(4个ViewPager的滑动界面,由于内容简单这里只给出其中1个)
1 &RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" 10
android:text="我是微信首页" 11
android:textSize="30dp" /& 12
13 &/RelativeLayout&
具体实现代码:
ViewPager适配器(关于ViewPager的使用方法这里就不多说了,不清楚的朋友看我这篇文章吧《安卓开发笔记&&ViewPager组件(仿微信引导界面)》)
1 package com.rabbit.
3 import java.util.L
5 import android.support.v4.view.PagerA
6 import android.view.V
7 import android.view.ViewG
* ViewPager适配器 10
* @author Balla_兔子 11
*/ 13 public class ContentAdapter extends PagerAdapter { 14
private List&View& 16
public ContentAdapter(List&View& views) { 18
this.views = 19
@Override 22
public int getCount() { 23
return views.size(); 24
@Override 27
public boolean isViewFromObject(View arg0, Object arg1) { 28
return arg0 == arg1; 29
@Override 32
public Object instantiateItem(ViewGroup container, int position) { 33
View view = views.get(position); 34
container.addView(view); 35
@Override 39
public void destroyItem(ViewGroup container, int position, Object object) { 40
container.removeView(views.get(position)); 41
MainActivity(主界面代码)
初始化控件后,完成对底部菜单的4个LinearLayout的点击监听事件,在用户触发点击事件的时候,设置选择状态然后跳转相对应的界面。为了使得滑动ViewPager也能同时触发底部菜单状态的改变,这里也对ViewPager设置了滑动监听。其他的代码注释很全,看注释就可以了。
1 package com.rabbit.
3 import java.util.ArrayL
4 import java.util.L
6 import android.app.A
7 import android.os.B
8 import android.support.v4.view.ViewP
9 import android.support.v4.view.ViewPager.OnPageChangeL
10 import android.view.V
11 import android.view.View.OnClickL
12 import android.widget.ImageV
13 import android.widget.LinearL
14 import android.widget.TextV
16 public class MainActivity extends Activity implements OnClickListener,OnPageChangeListener{
// 底部菜单4个Linearlayout
private LinearLayout ll_
private LinearLayout ll_
private LinearLayout ll_
private LinearLayout ll_
// 底部菜单4个ImageView
private ImageView iv_
private ImageView iv_
private ImageView iv_
private ImageView iv_
// 底部菜单4个菜单标题
private TextView tv_
private TextView tv_
private TextView tv_
private TextView tv_
// 中间内容区域
private ViewPager viewP
// ViewPager适配器ContentAdapter
private ContentA
private List&View&
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
initView();
// 初始化底部按钮事件
initEvent();
private void initEvent() {
// 设置按钮监听
ll_home.setOnClickListener(this);
ll_address.setOnClickListener(this);
ll_friend.setOnClickListener(this);
ll_setting.setOnClickListener(this);
//设置ViewPager滑动监听
viewPager.setOnPageChangeListener(this);
private void initView() {
// 底部菜单4个Linearlayout
this.ll_home = (LinearLayout) findViewById(R.id.ll_home);
this.ll_address = (LinearLayout) findViewById(R.id.ll_address);
this.ll_friend = (LinearLayout) findViewById(R.id.ll_friend);
this.ll_setting = (LinearLayout) findViewById(R.id.ll_setting);
// 底部菜单4个ImageView
this.iv_home = (ImageView) findViewById(R.id.iv_home);
this.iv_address = (ImageView) findViewById(R.id.iv_address);
this.iv_friend = (ImageView) findViewById(R.id.iv_friend);
this.iv_setting = (ImageView) findViewById(R.id.iv_setting);
// 底部菜单4个菜单标题
this.tv_home = (TextView) findViewById(R.id.tv_home);
this.tv_address = (TextView) findViewById(R.id.tv_address);
this.tv_friend = (TextView) findViewById(R.id.tv_friend);
this.tv_setting = (TextView) findViewById(R.id.tv_setting);
// 中间内容区域ViewPager
this.viewPager = (ViewPager) findViewById(R.id.vp_content);
View page_01 = View.inflate(MainActivity.this, R.layout.page_01, null);
View page_02 = View.inflate(MainActivity.this, R.layout.page_02, null);
View page_03 = View.inflate(MainActivity.this, R.layout.page_03, null);
View page_04 = View.inflate(MainActivity.this, R.layout.page_04, null);
views = new ArrayList&View&();
views.add(page_01);
views.add(page_02);
views.add(page_03); 100
views.add(page_04); 101
this.adapter = new ContentAdapter(views); 103
viewPager.setAdapter(adapter); 104
@Override 108
public void onClick(View v) { 109
// 在每次点击后将所有的底部按钮(ImageView,TextView)颜色改为灰色,然后根据点击着色 110
restartBotton(); 111
// ImageView和TetxView置为绿色,页面随之跳转 112
switch (v.getId()) { 113
case R.id.ll_home: 114
iv_home.setImageResource(R.drawable.tab_weixin_pressed); 115
tv_home.setTextColor(0xff1B940A); 116
viewPager.setCurrentItem(0); 117
break; 118
case R.id.ll_address: 119
iv_address.setImageResource(R.drawable.tab_address_pressed); 120
tv_address.setTextColor(0xff1B940A); 121
viewPager.setCurrentItem(1); 122
break; 123
case R.id.ll_friend: 124
iv_friend.setImageResource(R.drawable.tab_find_frd_pressed); 125
tv_friend.setTextColor(0xff1B940A); 126
viewPager.setCurrentItem(2); 127
break; 128
case R.id.ll_setting: 129
iv_setting.setImageResource(R.drawable.tab_find_frd_pressed); 130
tv_setting.setTextColor(0xff1B940A); 131
viewPager.setCurrentItem(3); 132
break; 133
default: 135
break; 136
private void restartBotton() { 141
// ImageView置为灰色 142
iv_home.setImageResource(R.drawable.tab_weixin_normal); 143
iv_address.setImageResource(R.drawable.tab_address_normal); 144
iv_friend.setImageResource(R.drawable.tab_find_frd_normal); 145
iv_setting.setImageResource(R.drawable.tab_settings_normal); 146
// TextView置为白色 147
tv_home.setTextColor(0xffffffff); 148
tv_address.setTextColor(0xffffffff); 149
tv_friend.setTextColor(0xffffffff); 150
tv_setting.setTextColor(0xffffffff); 151
@Override 154
public void onPageScrollStateChanged(int arg0) { 155
@Override 159
public void onPageScrolled(int arg0, float arg1, int arg2) { 160
@Override 164
public void onPageSelected(int arg0) { 165
restartBotton(); 166
//当前view被选择的时候,改变底部菜单图片,文字颜色 167
switch (arg0) { 168
case 0: 169
iv_home.setImageResource(R.drawable.tab_weixin_pressed); 170
tv_home.setTextColor(0xff1B940A); 171
break; 172
case 1: 173
iv_address.setImageResource(R.drawable.tab_address_pressed); 174
tv_address.setTextColor(0xff1B940A); 175
break; 176
case 2: 177
iv_friend.setImageResource(R.drawable.tab_find_frd_pressed); 178
tv_friend.setTextColor(0xff1B940A); 179
break; 180
case 3: 181
iv_setting.setImageResource(R.drawable.tab_find_frd_pressed); 182
tv_setting.setTextColor(0xff1B940A); 183
break; 184
default: 186
break; 187
3、具体实现(内容区域为Fragment固定界面)
布局文件:
布局文件基本没变化,只是把主界面的ViewPager改成了FramLayout,其他文件保持一致,就不贴出来了。
1 &LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
&include layout="@layout/activity_top" /&
&FrameLayout 10
android:id="@+id/fl_content" 11
android:layout_width="match_parent" 12
android:background="#ffffff" 13
android:layout_height="0dp" 14
android:layout_weight="1" & 15
&/FrameLayout& 16
&include layout="@layout/activity_bottom" /& 18
19 &/LinearLayout&
具体实现代码:
由于这次的内容是基于Fragment的,所以需要有4个Fragment文件,由于代码相同这里只贴出一个。
Frgament(HomeFragment,AddressFragment,FriendFragment,SettingFragment)
1 package com.rabbit.
3 import android.os.B
4 import android.support.annotation.N
5 import android.support.v4.app.F
6 import android.view.LayoutI
7 import android.view.V
8 import android.view.ViewG
10 public class HomeFragment extends Fragment { 11
@Override 12
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 13
return inflater.inflate(R.layout.page_01, container, false); 14
MainActivity(主界面代码)
代码很简单,一看就能明白就不多说什么了,只提个需要注意的地方,由于便于向下兼容这里的Fragment是用V4包下的,在导入包的时候需要注意一下。
1 package com.rabbit.
3 import android.os.B
4 import android.support.v4.app.F
5 import android.support.v4.app.FragmentA
6 import android.support.v4.app.FragmentM
7 import android.support.v4.app.FragmentT
8 import android.view.V
9 import android.view.View.OnClickL
10 import android.widget.ImageV
11 import android.widget.LinearL
12 import android.widget.TextV
14 public class MainActivity extends FragmentActivity implements OnClickListener {
// 底部菜单4个Linearlayout
private LinearLayout ll_
private LinearLayout ll_
private LinearLayout ll_
private LinearLayout ll_
// 底部菜单4个ImageView
private ImageView iv_
private ImageView iv_
private ImageView iv_
private ImageView iv_
// 底部菜单4个菜单标题
private TextView tv_
private TextView tv_
private TextView tv_
private TextView tv_
// 4个Fragment
private Fragment homeF
private Fragment addressF
private Fragment friendF
private Fragment settingF
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
initView();
// 初始化底部按钮事件
initEvent();
// 初始化并设置当前Fragment
initFragment(0);
private void initFragment(int index) {
// 由于是引用了V4包下的Fragment,所以这里的管理器要用getSupportFragmentManager获取
FragmentManager fragmentManager = getSupportFragmentManager();
// 开启事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
// 隐藏所有Fragment
hideFragment(transaction);
switch (index) {
if (homeFragment == null) {
homeFragment = new HomeFragment();
transaction.add(R.id.fl_content, homeFragment);
transaction.show(homeFragment);
if (addressFragment == null) {
addressFragment = new AddressFragment();
transaction.add(R.id.fl_content, addressFragment);
transaction.show(addressFragment);
if (friendFragment == null) {
friendFragment = new FriendFragment();
transaction.add(R.id.fl_content, friendFragment);
transaction.show(friendFragment);
if (settingFragment == null) {
settingFragment = new SettingFragment();
transaction.add(R.id.fl_content, settingFragment);
transaction.show(settingFragment);
// 提交事务 102
mit(); 103
//隐藏Fragment 107
private void hideFragment(FragmentTransaction transaction) { 108
if (homeFragment != null) { 109
transaction.hide(homeFragment); 110
if (addressFragment != null) { 112
transaction.hide(addressFragment); 113
if (friendFragment != null) { 115
transaction.hide(friendFragment); 116
if (settingFragment != null) { 118
transaction.hide(settingFragment); 119
private void initEvent() { 124
// 设置按钮监听 125
ll_home.setOnClickListener(this); 126
ll_address.setOnClickListener(this); 127
ll_friend.setOnClickListener(this); 128
ll_setting.setOnClickListener(this); 129
private void initView() { 133
// 底部菜单4个Linearlayout 135
this.ll_home = (LinearLayout) findViewById(R.id.ll_home); 136
this.ll_address = (LinearLayout) findViewById(R.id.ll_address); 137
this.ll_friend = (LinearLayout) findViewById(R.id.ll_friend); 138
this.ll_setting = (LinearLayout) findViewById(R.id.ll_setting); 139
// 底部菜单4个ImageView 141
this.iv_home = (ImageView) findViewById(R.id.iv_home); 142
this.iv_address = (ImageView) findViewById(R.id.iv_address); 143
this.iv_friend = (ImageView) findViewById(R.id.iv_friend); 144
this.iv_setting = (ImageView) findViewById(R.id.iv_setting); 145
// 底部菜单4个菜单标题 147
this.tv_home = (TextView) findViewById(R.id.tv_home); 148
this.tv_address = (TextView) findViewById(R.id.tv_address); 149
this.tv_friend = (TextView) findViewById(R.id.tv_friend); 150
this.tv_setting = (TextView) findViewById(R.id.tv_setting); 151
@Override 155
public void onClick(View v) { 156
// 在每次点击后将所有的底部按钮(ImageView,TextView)颜色改为灰色,然后根据点击着色 158
restartBotton(); 159
// ImageView和TetxView置为绿色,页面随之跳转 160
switch (v.getId()) { 161
case R.id.ll_home: 162
iv_home.setImageResource(R.drawable.tab_weixin_pressed); 163
tv_home.setTextColor(0xff1B940A); 164
initFragment(0); 165
break; 166
case R.id.ll_address: 167
iv_address.setImageResource(R.drawable.tab_address_pressed); 168
tv_address.setTextColor(0xff1B940A); 169
initFragment(1); 170
break; 171
case R.id.ll_friend: 172
iv_friend.setImageResource(R.drawable.tab_find_frd_pressed); 173
tv_friend.setTextColor(0xff1B940A); 174
initFragment(2); 175
break; 176
case R.id.ll_setting: 177
iv_setting.setImageResource(R.drawable.tab_find_frd_pressed); 178
tv_setting.setTextColor(0xff1B940A); 179
initFragment(3); 180
break; 181
default: 183
break; 184
private void restartBotton() { 189
// ImageView置为灰色 190
iv_home.setImageResource(R.drawable.tab_weixin_normal); 191
iv_address.setImageResource(R.drawable.tab_address_normal); 192
iv_friend.setImageResource(R.drawable.tab_find_frd_normal); 193
iv_setting.setImageResource(R.drawable.tab_settings_normal); 194
// TextView置为白色 195
tv_home.setTextColor(0xffffffff); 196
tv_address.setTextColor(0xffffffff); 197
tv_friend.setTextColor(0xffffffff); 198
tv_setting.setTextColor(0xffffffff); 199
到这里界面效果就基本实现了,就算是旋转屏幕也能够很好的达到适配效果,最后我们还需要做的2点,可能有些朋友已经发现了,在我们旋转屏幕的时候,Fragment会重新调用onCreate方法,导致成员变量重新初始化了一次,Fragment对象也重置为空,然后就调用不到hide方法,从而出现了界面重复叠加的情况。
下面提供解决的方法,其实很简单,只需要在AndroidManifest.xml里面对应的activity里添设置改换屏幕方向等操作时不触发oncreate事件就可以。
android:configChanges="orientation|keyboardHidden|screenSize"
最后我们隐藏下标题栏,在application里添加上:
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
这样就大功告成了!
基于ViewPager实现的内容:
1、界面可以滑动,美观,流畅。
1、当界面里有一些需要用手势来实现的内容会起冲突,比如我们ListView里的侧滑删除。
2、由于采用的是ViewPager,所以页面内容实现代码会严重依赖于MainActivity,代码太过冗余,不便于后期维护。
基于Fragment实现的内容:
1、Fragment文件单独存在,各自页面的内容各自去实现完成,有自己的生命周期,便于后期维护。
2、对于需要手势操作的一些内容不会起冲突。
1、界面不可滑动,比较死板。
作者:Balla_兔子出处:/lichenwei/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有&推荐&二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!}

我要回帖

更多关于 default.jpg 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信