侧面滑出菜单的最小框架
AndroudStudio 中自动生成的带有侧滑菜单的应用模板比较复杂,涉及多个部件,如果只想做一个简单的程序,可以使用下面的框架:
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- 标题栏,用于取代默认的 ActionBar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/teal_700"
android:minHeight="?attr/actionBarSize"
/>
<!-- 滑出菜单布局,必须在其内部布置主页面及菜单布局 -->
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 窗口主界面 -->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="主界面"
android:textSize="32dp"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="42dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- 滑动菜单布局,必须包含 layout_gravity="start" 属性 -->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/menu_bg_color"
>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="菜单界面"
android:textSize="32dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.drawerlayout.widget.DrawerLayout>
</LinearLayout>
控件面板上没有DrawerLayout组件,只能手工输入。
MainActivity.java
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import com.google.android.material.snackbar.Snackbar;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText edtInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 用 Toolbar 代替的默认的 ActionBar,为消除冲突,需要要在 AndroidManifest.xml 中设置
// android:theme="@style/Theme.AppCompat.Light.NoActionBar" 属性
Toolbar toolbar = findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// 用标题栏左侧的按钮控制左滑菜单的展开与收起
final DrawerLayout drawerLayout = findViewById(R.id.drawer);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
};
toggle.syncState();
drawerLayout.addDrawerListener(toggle);
Button btnMain = (Button) findViewById(R.id.btnMain);
btnMain.setOnClickListener(this);
ImageButton btnSearch = (ImageButton) findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(this);
}
// Drawer 菜单和主窗体都位于同一个布局文件内,因此可以在同一 java 中响应事件
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnSearch:
Log.i("infoo", "菜单上的按钮");
break;
case R.id.btnMain:
Log.i("infoo", "主界面上的按钮");
break;
}
}
}
如果要手工切换左滑菜单的显示和隐藏,可以使用下面的方法:
显示:drawerLayout.openDrawer(Gravity.LEFT);
隐藏:drawerLayout.closeDrawer(Gravity.LEFT);

浙公网安备 33010602011771号