DrawableLayout(导航抽屉效果)使用遇到的几个常规网上资源未提到的部分
2016-11-18 16:03
696 查看
抽屉效果就是DrawerLayout,该类位于V4包中。
android.support.v4.widget.DrawerLayout,与SlideMenu效果类似,但界面效果有些不同(不细说)
在使用DrawerLayout的过程中,最常用的是左右抽屉内容固定,直接写在xml中,
比如:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- 内容区域 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<!-- 左侧抽屉 -->
<LinearLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#E0EEE0"
android:orientation="vertical" >
</LinearLayout>
<!-- 右侧抽屉 -->
<LinearLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#EE8262"
android:orientation="vertical" >
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
这类最简单的是官方类的。但我们要用的时候会有很多变化,比如,左右或者还有中间部分内容不固定,就需要使用Fragmemnt,可以使用fragment的replaceFRagment方法替换:
private Fragment replaceFragment(int viewResource, String fragmentName, String key, int extraValue) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = Fragment.instantiate(this, fragmentName);
Bundle args = new Bundle();
args.putInt(key, extraValue);
fragment.setArguments(args);
ft.replace(viewResource, fragment);
ft.commit();
getSupportFragmentManager().executePendingTransactions();
return fragment;
}
或者
private Fragment replaceFragmentByName(int viewResource, String fragmentName) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = Fragment.instantiate(this, fragmentName);
ft.replace(viewResource, fragment);
ft.commit();
getSupportFragmentManager().executePendingTransactions();
return fragment;
}
这是一个方法,只是有的fragment需要不同标记或传递参数等,可根据自己的需要自己写这个replace方法。
DrawableLayout 几个重要方法:
private DrawerLayout mDrawerLayout;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.drawablelayout_left_shadow, Gravity.START); //左侧抽屉设置阴影,这个阴影最好比较小,有一点效果就好了,不能切图,会很难看,最好自己写渐变的shape,定好宽高
mDrawerLayout.setDrawerShadow(R.drawable.drawablelayout_right_shadow, Gravity.END);
mDrawerLayout.setScrimColor(getResources().getColor(R.color.c_03222d)); //抽屉效果显现出来时有透明渐变到此颜色
mDrawerLayout
.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, findViewById(R.id.fragment_content_right)); //锁定右侧抽屉不能滑动出现,但这种情况点击返回时,抽屉不会退出,需要下面监听改变DrawerLockMode:
mDrawerLayout.setDrawerListener(new DrawerListener() {
@Override
public void onDrawerStateChanged(int arg0) {
}
@Override
public void onDrawerSlide(View arg0, float arg1) {
}
@Override
public void onDrawerOpened(View arg0) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,
findViewById(R.id.fragment_content_right));
}
@Override
public void onDrawerClosed(View arg0) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,
findViewById(R.id.fragment_content_right));
}
});
另外,如果想不根据系统自带的抽屉效果宽,可以在DrawerLayout的xml中设定宽度,比如最上方的240dp,200dp,而不是在replace的fragment中设置,我也没有在fragment的xml中试过,有机会看看是不是一样的效果
android.support.v4.widget.DrawerLayout,与SlideMenu效果类似,但界面效果有些不同(不细说)
在使用DrawerLayout的过程中,最常用的是左右抽屉内容固定,直接写在xml中,
比如:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- 内容区域 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
<!-- 左侧抽屉 -->
<LinearLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#E0EEE0"
android:orientation="vertical" >
</LinearLayout>
<!-- 右侧抽屉 -->
<LinearLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#EE8262"
android:orientation="vertical" >
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
这类最简单的是官方类的。但我们要用的时候会有很多变化,比如,左右或者还有中间部分内容不固定,就需要使用Fragmemnt,可以使用fragment的replaceFRagment方法替换:
private Fragment replaceFragment(int viewResource, String fragmentName, String key, int extraValue) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = Fragment.instantiate(this, fragmentName);
Bundle args = new Bundle();
args.putInt(key, extraValue);
fragment.setArguments(args);
ft.replace(viewResource, fragment);
ft.commit();
getSupportFragmentManager().executePendingTransactions();
return fragment;
}
或者
private Fragment replaceFragmentByName(int viewResource, String fragmentName) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = Fragment.instantiate(this, fragmentName);
ft.replace(viewResource, fragment);
ft.commit();
getSupportFragmentManager().executePendingTransactions();
return fragment;
}
这是一个方法,只是有的fragment需要不同标记或传递参数等,可根据自己的需要自己写这个replace方法。
DrawableLayout 几个重要方法:
private DrawerLayout mDrawerLayout;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.drawablelayout_left_shadow, Gravity.START); //左侧抽屉设置阴影,这个阴影最好比较小,有一点效果就好了,不能切图,会很难看,最好自己写渐变的shape,定好宽高
mDrawerLayout.setDrawerShadow(R.drawable.drawablelayout_right_shadow, Gravity.END);
mDrawerLayout.setScrimColor(getResources().getColor(R.color.c_03222d)); //抽屉效果显现出来时有透明渐变到此颜色
mDrawerLayout
.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, findViewById(R.id.fragment_content_right)); //锁定右侧抽屉不能滑动出现,但这种情况点击返回时,抽屉不会退出,需要下面监听改变DrawerLockMode:
mDrawerLayout.setDrawerListener(new DrawerListener() {
@Override
public void onDrawerStateChanged(int arg0) {
}
@Override
public void onDrawerSlide(View arg0, float arg1) {
}
@Override
public void onDrawerOpened(View arg0) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,
findViewById(R.id.fragment_content_right));
}
@Override
public void onDrawerClosed(View arg0) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,
findViewById(R.id.fragment_content_right));
}
});
另外,如果想不根据系统自带的抽屉效果宽,可以在DrawerLayout的xml中设定宽度,比如最上方的240dp,200dp,而不是在replace的fragment中设置,我也没有在fragment的xml中试过,有机会看看是不是一样的效果
相关文章推荐
- Android5.0之NavigationView的使用 。android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- Android 使用DrawerLayout实现抽屉效果的导航菜单
- Android 导航抽屉---Navigation Drawer (DrawerLayout)使用
- Android资源文件res的使用详解(strings,layout,drawable,arrays等)from http://www.jcodecraeer.com/a/anzhuokaifa/an
- 使用DrawerLayout与listview实现抽屉菜单效果
- (转)android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果
- DrawerLayout 抽屉菜单效果使用实例介绍
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- 使用DrawerLayout实现抽屉效果
- Android资源文件res的使用详解(strings,layout,drawable,arrays等)
- 使用DrawerLayout和SlidingDrawer实现的抽屉效果
- android开发游记:DrawerLayout 实现抽屉效果的导航菜单
- 使用AndroidStudio一分钟实现Navigation Drawer 导航抽屉效果
- android 使用lint + studio ,排查客户端无用资源,string,drawable,layout等
- android导航抽屉效果使用DrawerLayout
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- android 侧滑菜单效果----DrawerLayout(抽屉导航)
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果