先说下标题的意思,因为当时问了一些人,就是这么问的,说不知道啥意思,没理解我想干什么,这个意思就是。。。抽屉难道一定要完全关着或完全开着吗?我只开一部分然后声称我这个抽屉是关着的不行么。
算了,先贴个效果图:
这个情况是抽屉关着的时候:
这个情况是抽屉开着的时候
这是股票的一个抽屉。 然后boss给我说还有3个,顿时纠结,幸亏把内容最为丰富的股票给先搞定了。
。。。。就是这样,一开始就想着把抽屉的手柄写大点,用一个LinearLayout布局来做手柄,但是这样一来,发现布局里面的所有的按钮都相应了我的点击事件,擦。在抽屉手把位置的左边,有个按钮,点击一下会变成减号,但是如果是这样的话,那么我只要一点手柄,他也跟着变了。寻找了一些方法,未果,终于在csdn的一个问题帖子上找到了类似的情况。
基本的思路就是,先拦截了所有抽屉手柄的触摸事件,然后在找出用户想作为手柄的控件id,以及他们的屏幕位置。当点击到那些位置的时候,再做判断。
直接上代码,比较少代码就能实现的,理解起来也不困难,当然,要熟悉Android的控件所对应的实现方法会更简单:
public class MySlidingDrawer extends SlidingDrawer { private int mHandleId = 0; // 抽屉行为控件ID private int[] mTouchableIds = null; // Handle 部分其他控件ID public int getHandleId() { return mHandleId; } public void setHandleId(int mHandleId) { this.mHandleId = mHandleId; } public int[] getTouchableIds() { return mTouchableIds; } public void setTouchableIds(int[] mTouchableIds) { this.mTouchableIds = mTouchableIds; } public MySlidingDrawer(Context context, AttributeSet attrs) { super(context, attrs); } public MySlidingDrawer(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /* * 获取控件的屏幕区域 */ public Rect getRectOnScreen(View view) { Rect rect = new Rect(); int[] location = new int[2]; View parent = view; if (view.getParent() instanceof View) { parent = (View) view.getParent(); } parent.getLocationOnScreen(location); view.getHitRect(rect); rect.offset(location[0], location[1]); return rect; } // 拦截触摸事件,用以修改事件 @Override public boolean onInterceptTouchEvent(MotionEvent event) { // 确定控件的屏幕区域 int[] location = new int[2]; int x = (int) event.getX(); int y = (int) event.getY(); this.getLocationOnScreen(location); x += location[0]; y += location[1]; // handle部分独立按钮,循环寻找非抽屉手柄的布局。 if (mTouchableIds != null) { for (int id : mTouchableIds) { View view = findViewById(id); Rect rect = getRectOnScreen(view); if (rect.contains(x, y)) { Log.i("MySlidingDrawer on touch", String.format( "Action=%d Button=%s", event.getAction(), ((LinearLayout) view).getContext().toString())); // return boolean result = view.dispatchTouchEvent(event); Log.i("MySlidingDrawer dispatchTouchEvent", "" + result); return false; } } } // 抽屉行为控件,本想同上,写成数组,寻找多个手柄,但是这样就没有了抽屉拖动效果 if (event.getAction() == MotionEvent.ACTION_DOWN && mHandleId != 0) { View view = findViewById(mHandleId); Log.i("MySlidingDrawer on touch", String.format("%d,%d", x, y)); Rect rect = getRectOnScreen(view); Log.i("MySlidingDrawer handle screen rect", String .format("%d,%d %d,%d", rect.left, rect.top, rect.right, rect.bottom)); if (rect.contains(x, y)) {// 点击抽屉控件时交由系统处理 Log.i("MySlidingDrawer", "Hit handle"); } else { return false; } } return super.onInterceptTouchEvent(event); } // 获取触屏事件 @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }
大概就是这样的重写。
再来是布局文件:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/buttontest" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="test" /> <!-- bottom menu --> <!-- 股票类 --> <com.quan.MySlidingDrawer android:id="@+id/stockDrawer" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:handle="@+id/handleStock" android:content="@+id/contentStock" android:visibility="visible"> <!-- top view 3 rows --> <LinearLayout android:layout_width="fill_parent" android:id="@+id/handleStock" android:layout_height="85dip" android:orientation="vertical"> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center"> <ImageButton android:layout_width="60dip" android:id="@+id/mbutton" android:layout_height="10dip" android:src="@drawable/up" android:layout_gravity="center" /> </LinearLayout> <!-- top left --> <LinearLayout android:layout_height="75dip" android:layout_width="fill_parent" android:orientation="horizontal" android:id="@+id/otherHandler" android:background="#000"> <!-- top left --> <RelativeLayout android:id="@+id/topLeft" android:layout_width="39dip" android:layout_height="75dip" android:orientation="vertical"> <Button android:layout_width="30dip" android:layout_height="30dip" android:id="@+id/btn_add_cut" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_gravity="center_vertical" android:focusable="true" android:background="@drawable/add" /> </RelativeLayout> <RelativeLayout android:layout_width="120dip" android:layout_height="75dip"> <TextView android:layout_height="50dip" android:text="2616.99" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:gravity="right" android:id="@+id/tvCurrentPrice" android:textColor="#f00" android:textSize="30dip" android:layout_gravity="center_vertical" /> <TextView android:text="+22.50" android:textColor="#f00" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:id="@+id/tvUpDown" /> <TextView android:layout_height="wrap_content" android:text="0.21%" android:layout_width="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:gravity="right" android:textColor="#f00" android:id="@+id/tvAmplitude" /> </RelativeLayout> <View android:layout_width="1dip" android:layout_height="fill_parent" android:background="#ff0000" /> <!-- top right --> <TableLayout android:id="@+id/topRight" android:layout_width="159dip" android:layout_height="fill_parent" android:orientation="vertical"> <TableRow> <TextView android:text="委比" android:textColor="#848684" android:layout_height="24dip" android:layout_width="70dip" android:gravity="left" /> <TextView android:id="@+id/tvAppoint" android:text="2.3%" android:textColor="#f00" android:layout_height="24dip" android:layout_width="89dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <View android:layout_height="1dip" android:layout_width="fill_parent" android:background="#f00" /> <TableRow> <TextView android:text="委差" android:textColor="#848684" android:layout_height="24dip" android:layout_width="70dip" android:gravity="left" /> <TextView android:id="@+id/tvPoorCom" android:text="32" android:textColor="#f00" android:layout_height="24dip" android:layout_width="89dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <View android:layout_height="1dip" android:layout_width="fill_parent" android:background="#f00" /> <TableRow> <TextView android:text="量比" android:textColor="#848684" android:layout_height="24dip" android:layout_width="70dip" android:gravity="left" /> <TextView android:id="@+id/tvReQuantity" android:text="-2.45" android:textColor="#0f0" android:layout_height="24dip" android:layout_width="89dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> </TableLayout> </LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/contentStock" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#000"> <View android:layout_height="1dip" android:layout_width="fill_parent" android:background="#f00" /> <!-- bottom rows --> <LinearLayout android:id="@+id/bottomRows" android:layout_height="253dip" android:layout_width="fill_parent" android:orientation="horizontal"> <!-- left table --> <TableLayout android:layout_height="fill_parent" android:layout_width="160dip"> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="均价" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <View android:layout_height="1dip" android:background="#f00" /> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="总手" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="现手" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:id="@+id/CURVOL" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="金额" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:id="@+id/MONEY" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <View android:layout_height="1dip" android:background="#f00" /> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="外盘" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <View android:layout_height="1dip" android:background="#f00" /> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="买一" android:gravity="left" /> <TextView android:text="2539.82" android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:text="23" android:textColor="#AE8B00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="买二" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="买三" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="买四" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="买五" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" android:paddingRight="2dip" /> </TableRow> </TableLayout> <!-- right table --> <TableLayout android:layout_height="fill_parent" android:layout_width="160dip"> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="昨收" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <View android:layout_height="1dip" android:background="#f00" /> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="开盘" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:id="@+id/OPEN" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="最高" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:id="@+id/MAX" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="最低" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:id="@+id/MIN" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <View android:layout_height="1dip" android:background="#f00" /> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="内盘" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:id="@+id/INNER_TRAY" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <View android:layout_height="1dip" android:background="#f00" /> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="卖一" android:gravity="left" /> <TextView android:text="2549.82" android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:text="45" android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="卖二" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="卖三" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="卖四" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#C39C00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> <TableRow> <TextView android:textColor="#848684" android:layout_height="25dip" android:layout_width="40dip" android:text="卖五" android:gravity="left" /> <TextView android:textColor="#f00" android:layout_height="25dip" android:layout_width="80dip" android:gravity="center" /> <TextView android:textColor="#AE8B00" android:layout_height="25dip" android:layout_width="40dip" android:gravity="right" /> </TableRow> </TableLayout> </LinearLayout> </LinearLayout> </com.quan.MySlidingDrawer> </RelativeLayout>
做完这些之后又把那三个布局写完,发现。。。你妹的,原来的布局是用一个相对布局来控制抽屉的拉伸长度。其他3个内容都没这么多,所以3个的下面都是空的,又搞笑呢。接着寻找抽屉适配内容进行长度控制。
又是重写,烦躁的很啊。直接代码,主要思想就是先测量里面内容的高度。因为抽屉本身是没有写wrap_content(即适配内容高度来进行拉伸高度控制)的,所以重写的应该是这个部分。在一个英文的编程疑难解答上找到了答案。
onMeasure是测量控件宽高的方法。setMeasuredDimension是设置到布局里~~~
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); if (widthSpecMode == MeasureSpec.UNSPECIFIED || heightSpecMode == MeasureSpec.UNSPECIFIED) { throw new RuntimeException( "SlidingDrawer cannot have UNSPECIFIED dimensions"); } final View handle = getHandle(); final View content = getContent(); measureChild(handle, widthMeasureSpec, heightMeasureSpec); int extra = handle.getHeight() / 6; System.out.println(handle.getMeasuredHeight() + " " + content.getHeight()); if (mVertical) { int height = heightSpecSize - handle.getMeasuredHeight()/* + extra */ - mTopOffset; content.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, heightSpecMode)); heightSpecSize = handle.getMeasuredHeight() /* + extra */ + mTopOffset + content.getMeasuredHeight(); widthSpecSize = content.getMeasuredWidth(); if (handle.getMeasuredWidth() > widthSpecSize) widthSpecSize = handle.getMeasuredWidth(); } setMeasuredDimension(widthSpecSize, heightSpecSize); } private boolean mVertical; private int mTopOffset;
直接把这段copy 到需要重写的抽屉类中,测试,搞定。
但是发现左边的那个图标又不能点击了,变成了触摸,就是有一定位移才能改变他的变量。
经过多番努力,改了一下,把那个按钮放在一个布局里面再对布局进行点击监听,一切搞定~~
测试这个抽屉用的activity:
public class MainActivity extends Activity { private MySlidingDrawer mdrawer;// 抽屉 private ImageButton mbutton;// 抽屉拉动按钮 private LinearLayout otherHandler; private LinearLayout bottomRows;// 抽屉真正的内容 private Button test; private TextView tv_top; private Button btn_add_cut;// 真实抽屉左上角按钮 int i = 1;// 定义成员变量,协助点击左上角按钮时改变图标,点击+变成2,点击-变成1 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); findview(); addlistener(); } /** 初始化组件 */ private void findview() { tv_top = (TextView) this.findViewById(R.id.tvCurrentPrice); test = (Button) this.findViewById(R.id.buttontest); mdrawer = (MySlidingDrawer) findViewById(R.id.stockDrawer); // 传入抽屉手柄的id mdrawer.setHandleId(R.id.mbutton); mdrawer.setTouchableIds(new int[] { R.id.otherHandler }); mbutton = (ImageButton) findViewById(R.id.mbutton); otherHandler = (LinearLayout) this.findViewById(R.id.otherHandler); bottomRows = (LinearLayout) findViewById(R.id.bottomRows); btn_add_cut = (Button) findViewById(R.id.btn_add_cut); } /** * 给各个组建添加事件监听 */ private void addlistener() { test.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { tv_top.setText("8585"); } }); // 抽屉打开 mdrawer.setOnDrawerOpenListener(new MySlidingDrawer.OnDrawerOpenListener() { public void onDrawerOpened() { mbutton.setImageResource(R.drawable.down); } }); // 抽屉关闭 mdrawer.setOnDrawerCloseListener(new MySlidingDrawer.OnDrawerCloseListener() { public void onDrawerClosed() { mbutton.setImageResource(R.drawable.up); } }); // 抽屉正在拉动或停止拉动 mdrawer.setOnDrawerScrollListener(new MySlidingDrawer.OnDrawerScrollListener() { public void onScrollStarted() { } public void onScrollEnded() { } }); btn_add_cut.setOnClickListener(new ButtonAddCutListener()); // // 真实抽屉,非头部部分,在打开状态点击时关闭抽屉 bottomRows.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mdrawer.isOpened()) { mdrawer.animateClose(); } } }); // otherHandler.setOnClickListener(new ButtonAddCutListener()); } /** 抽屉左上角按钮点击改变图片事件 */ private class ButtonAddCutListener implements OnClickListener { @Override public void onClick(View v) { switch (i) { case 1: btn_add_cut.setBackgroundDrawable(getResources().getDrawable( R.drawable.cut)); // btn_add_cut_on.setImageResource(R.drawable.cut); i = 2; System.out.println("+"); break; case 2: btn_add_cut.setBackgroundDrawable(getResources().getDrawable( R.drawable.add)); // btn_add_cut_on.setImageResource(R.drawable.add); i = 1; System.out.println("-"); break; } } } }
要有会的高手帮我看看哪里写的不对哇。谢谢了。。。。。我是纯新手。
相关推荐
在本示例中,我们将探讨如何实现特定的需求:去除内容区域的阴影,点击内容时不关闭抽屉,抽屉默认打开,并且在抽屉滑动时内容区域跟随移动。 首先,我们来看如何去除内容区域的阴影。在DrawerLayout中,默认情况下...
在描述中提到的“默认会有一部分内容显示出来”,这可能指的是在主内容视图下方预览一部分抽屉内容。在`DrawerLayout`中,可以通过设置`android:layout_gravity`属性来控制抽屉的位置,以及通过调整抽屉布局的大小...
在默认情况下,DrawerLayout会在主内容视图的边缘添加阴影效果,并且当用户点击阴影区域时,抽屉会自动关闭。然而,有时我们可能希望去除这个阴影效果,同时使阴影部分能够点击到背后的视图,且抽屉仍然可以通过侧滑...
2. **主内容视图和抽屉视图**:在`DrawerLayout`内部,放置一个用于显示主要内容的布局(通常是一个`FrameLayout`或`RelativeLayout`),然后为抽屉创建一个单独的布局,可以是`LinearLayout`或`ListView`,并设置`...
handle通常是用户点击或滑动的触发器,而content则是在抽屉展开时显示的内容。在XML布局文件中,我们可以使用`<SlidingDrawer>`标签来创建这个控件。 在XML布局文件中,SlidingDrawer的属性主要有以下几个关键点: ...
抽屉布局的实现通常涉及到Android开发中的`DrawerLayout`组件,这是Android SDK中的一部分,属于`android.support.v4.widget`包。`DrawerLayout`允许开发者在主视图旁边添加一个或多个可以滑动显示的“抽屉”视图。...
抽屉布局在Android中主要用于提供导航菜单或者隐藏的额外内容,用户可以通过手势从屏幕边缘滑动来打开和关闭。 1. **Android DrawerLayout** 抽屉效果主要通过`DrawerLayout`组件来实现,它是Android官方提供的一...
在Android应用开发中,抽屉式导航栏(DrawerLayout)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来展示一个可隐藏的菜单,通常用于放置导航选项。这个设计灵感来源于现实生活中的抽屉,因此得名。在本...
在Android应用开发中,"侧边抽屉效果"(通常称为侧滑菜单或抽屉布局)是一种常见的设计模式,用于实现应用的主要导航功能。这种效果允许用户从屏幕边缘滑动,展示一个隐藏的菜单,通常包含应用的不同部分或设置选项...
而`DrawerLayout`则是自Android 4.0(API Level 14)开始引入的,它是Google Material Design的一部分,支持左右两个方向的抽屉,并且与`NavigationView`等组件配合使用,提供了更丰富的功能和更好的用户体验。...
抽屉效果是Android Material Design设计规范中的一个重要组成部分,增强了用户的交互体验。 实现抽屉效果主要涉及以下知识点: 1. **DrawerLayout**: Android提供的`android.support.v4.widget.DrawerLayout`(在...
在C#编程环境中,WinForm应用是用于构建桌面应用程序的常用框架。"winform抽屉菜单.zip"这个压缩包很可能包含...同时,对Excel文件的处理能力也是开发过程中不可或缺的一部分,尤其是在需要处理大量数据或用户输入时。
在iOS应用开发中,侧拉抽屉(Side Drawer)是一种常见的设计模式,它通常用于实现导航菜单或显示附加内容。这种效果在很多App中都可以看到,例如Facebook、Instagram等,用户可以通过从屏幕边缘滑动来展示或隐藏菜单...
主内容区域是用户默认看到的部分,而抽屉区域则是在滑动后显示。通常,抽屉区域会包含一些额外的操作按钮或信息。 5. **事件回调**:`SlideListView`可能提供了回调接口,以便开发者在抽屉打开或关闭时执行特定的...
布局中包含两个部分,主内容区和抽屉区域,抽屉区域默认是隐藏的,通过手势或按钮触发显示。 2. **手势检测**:Android提供了GestureDetector和MotionEvent类来处理用户的滑动操作。通过监听滑动事件,可以判断是否...
- 当抽屉打开时,系统默认会在相应的屏幕边缘显示一个小的指示器,提示用户抽屉的存在。你可以通过`DrawerLayout`的属性如`drawerIndicatorEnabled`来控制这个指示器。 5. **Fragment切换**: - 抽屉中的选项通常...
在Windows Forms(Winform)开发中,抽屉式菜单是一种常见的界面设计模式,它借鉴了移动应用中的设计概念,提供了一种节省空间、交互性强的菜单展现方式。抽屉式菜单通常隐藏在屏幕边缘,当用户触发特定操作时,如...
在这个场景中,我们关注的是如何在不关闭抽屉的情况下,让用户能够点击阴影部分并触发相关的视图(View),同时还能通过侧滑来关闭抽屉。 首先,DrawerLayout的工作原理是通过监听滑动手势,来展示或隐藏附加的...
在Android应用开发中,抽屉式侧滑菜单(DrawerLayout)是常见的导航设计模式,它允许用户从屏幕边缘滑动以展示一个隐藏的菜单。在本案例中,我们讨论的是一个特殊的实现,即"双向抽屉式侧滑菜单",这使得应用可以从...
在Android应用开发中,抽屉菜单(Drawer Layout)是一种常见的设计模式,用于实现从屏幕边缘滑动出的导航菜单。这种设计通常用于大型应用程序,提供一个简洁的方式展示多个层级的导航选项。标题“android 左右侧滑...