我想在Pull of ActionBar / ToolBar项目上显示布局。此布局必须覆盖ActionBar / ToolBar,换句话说,此布局必须在ActionBar / Toolbar上显示。
此要求类似于Android的默认通知抽屉。
我有一个ToolBar和一个项目。如果我拉动该项目,则新布局必须来自具有固定高度的顶部,并且可以通过点击具有拉动效果的ToolBar项目来关闭此布局。
我试过Umano的SlidingPanel无法成功。
我使用了DialogPlus库。我更接近我的要求。使用DialogPlus可以通过单击ToolBar项目来实现,但是缺少拉动效果。
如何使用拉效显示/隐藏布局?
答案 0 :(得分:1)
这是一个简单的xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:animateLayoutChanges="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0061C2"
android:minHeight="?attr/actionBarSize"
app:popupTheme="@style/Theme.AppCompat.Light.DarkActionBar"
app:theme="@style/Toolbar"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<RelativeLayout
android:id="@+id/myLayout"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:background="#ffff7100"
android:visibility="gone">
</RelativeLayout>
</RelativeLayout>
工具栏是behinf“myLayout”,所以如果“myLayout”可见,它将隐藏工具栏 在你的java中,点击该项
(findViewById(R.id.myLayout).setVisibility(View.VISIBLE);
并将显示一个布局,你将获得一个动画,因为我正在使用
android:animateLayoutChanges="true"
在myLayout的底部添加相同的项目,并将其添加为onClickListener
(findViewById(R.id.myLayout).setVisibility(View.GONE);
您可以使用工具栏
执行此操作答案 1 :(得分:0)
做一些事情以响应手势工具gestureListener。对于这种情况,您可以创建一个匿名内部类,或者您可以立即实现SimpleGestureListener,并且在onFling方法中,您可以编写逻辑以更改布局。
public class MainActivity extends Activity implements
GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener{
private GestureDetectorCompat mDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
...
//other unimplemented methods..
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
//logic for layout change
return true;
}
}