【问题标题】:How to implement a collapsible (with a handle) vertical sidebar android如何实现可折叠(带手柄)垂直侧边栏android
【发布时间】:2016-10-15 04:27:13
【问题描述】:

我正在尝试使用手柄实现可折叠的侧边栏右侧。侧边栏包含将被拖放到线性布局中的项目。基本上我所追求的功能有点像:

所需的功能

其中“H”是用于切换侧边栏打开/关闭的按钮/手柄。另外,我希望它覆盖或浮动在活动的主要内容上(这样视图的展开和折叠不会影响主要内容的布局)。

但是,我正在努力假设实现这一目标的方法。我试着把它想象成一个导航抽屉,但我不会用它来导航,所以我认为这是不正确的。我一直在研究不同的可折叠视图,但其中大多数是水平的(垂直扩展)或与主要内容处于同一水平并修改其布局。

有什么方法可以创建一个布局/片段,让我可以像我描述的那样从侧边栏中访问这些拖放项目?我想不出解决这个问题的方法。

【问题讨论】:

    标签: java android xml android-layout


    【解决方案1】:

    android studio 中有没有例子:

    右键单击你的包 -> 新建 -> 活动 -> 导航抽屉活动

    【讨论】:

    • 嗨 javadaskari,感谢您的回复,但我试图避免使用导航抽屉(因为我不会使用它来导航)。
    【解决方案2】:

    由于您不想使用导航抽屉,

    布局

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:animateLayoutChanges="true">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:background="@color/black">
    
    
        </LinearLayout>
    
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="100dp"
            android:layout_height="0dp"
            android:background="@color/white"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:background="@color/black"
            android:text="H"
            app:layout_constraintEnd_toStartOf="@+id/recyclerView"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    活动

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            View view = findViewById(R.id.recyclerView);
            findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(view.getVisibility() == View.VISIBLE) {
                        view.setVisibility(View.GONE);
                    } else {
                        view.setVisibility(View.VISIBLE);
                    }
                }
            });
        }
    }
    

    解释

    使用约束布局,您可以通过单击按钮启用或禁用可见性。动画只是由 android:animateLayoutChanges="true" 完成。您可以根据需要使用不同的视图和自定义动画。

    【讨论】:

      【解决方案3】:

      试试这个,它会为你工作

      activity_main.xml

       <?xml version="1.0" encoding="utf-8"?>
      <androidx.drawerlayout.widget.DrawerLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/my_drawer_layout"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          tools:context=".MainActivity"
          tools:ignore="HardcodedText">
          <LinearLayout
              android:layout_width="match_parent"
              android:orientation="vertical"
              android:layout_height="match_parent">
              <Button
                  android:layout_width="50dp"
                  android:layout_height="wrap_content"
                  android:text="H"
                  android:layout_gravity="end"
                  android:id="@+id/clickBtnId"
                  android:layout_marginTop="100dp"/>
      
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginTop="128dp"
                  android:gravity="center"
                  android:text="Item 1"
                  android:textSize="18sp" />
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginTop="50dp"
                  android:gravity="center"
                  android:text="Item 1"
                  android:textSize="18sp" />
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginTop="50dp"
                  android:gravity="center"
                  android:text="Item 1"
                  android:textSize="18sp" />
          </LinearLayout>
      
          <com.google.android.material.navigation.NavigationView
              android:layout_width="wrap_content"
              android:background="#334257"
              android:layout_height="match_parent"
              android:layout_gravity="end"
              app:itemTextColor="#fff"
              app:menu="@menu/navigation_menu" />
      
      </androidx.drawerlayout.widget.DrawerLayout>
      

      menu/navigation_menu.xml

      <?xml version="1.0" encoding="utf-8"?>
      <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          tools:ignore="HardcodedText">
          <item
              android:title="Item 1"/>
          <item
              android:title="Item 2" />
          <item
              android:title="Item 3" />
          <item
              android:title="Item 4" />
      </menu>
      

      最后是MainActivity.java

      public class MainActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          Button clickBtn;
          clickBtn = findViewById(R.id.clickBtnId);
          clickBtn.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  DrawerLayout drawerLayout = findViewById(R.id.my_drawer_layout);
                  if(!drawerLayout.isDrawerOpen(Gravity.RIGHT)) {
                      drawerLayout.openDrawer(Gravity.RIGHT);
                      clickBtn.setGravity(Gravity.CENTER);
                  }
                  else {
                      drawerLayout.closeDrawer(Gravity.RIGHT);
                      clickBtn.setGravity(Gravity.END);
                  }
              }
          });
      }}
      

      输出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-14
        • 2014-06-20
        • 1970-01-01
        • 2021-09-23
        • 2016-10-14
        • 1970-01-01
        • 2018-03-15
        相关资源
        最近更新 更多