Judul menjelaskan semuanya. Semua yang ingin saya lakukan adalah mengetahui apakah panel samping navigasi terbuka atau tidak. Saya banyak mencari di internet dan menemukan metode tersebut isDrawerOpen(int drawerGravity)
tetapi tidak dapat menemukan jawaban yang memuaskan yang menjelaskan cara menggunakannya dalam suatu metode. Saya akan sangat menghargai jika ada yang menjelaskan kepada saya.
Terima kasih sebelumnya!
android
android-navigation
Chinmay Dabke
sumber
sumber
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList)
. mDrawerLayout adalah laci dan mDrawerList adalah tampilan daftarJawaban:
Dengan asumsi Anda telah menentukan drawerlayout di xml:
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); ... if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) { //drawer is open }
sumber
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description */ R.string.drawer_close /* "close drawer" description */ ) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { super.onDrawerClosed(view); getActionBar().setTitle(mTitle); } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); getActionBar().setTitle(mDrawerTitle); } }; // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle);
Pendengar itu menggunakan :)
sumber
Menggunakan:
mDrawerLayout.isDrawerOpen () metode
Contoh:
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) { mDrawerLayout.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer! }else{ mDrawerLayout.openDrawer(Gravity.LEFT); //OPEN Nav Drawer! }
sumber
Dengan cara berikut Anda dapat menemukan Laci terbuka atau tertutup ..
public class YourActivity extends AppCompatActivity implements DrawerLayout.DrawerListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dash_board); DrawerLayout drawer=(DrawerLayout)findViewById(R.id.container); drawer.setDrawerListener(this); }//onCreate() @Override public void onDrawerOpened(View arg0) { //write your code } @Override public void onDrawerClosed(View arg0) { //write your code } @Override public void onDrawerSlide(View arg0, float arg1) { //write your code } @Override public void onDrawerStateChanged(int arg0) { //write your code } }//class
sumber
jawaban shakeJ itu benar, dan ingat Anda dapat menggunakan onDrawerSlide untuk dapat mengaktifkan fungsi lain ... misalnya saya menggunakannya untuk mengubah Warna StatusBar.
/** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { super.onDrawerClosed(view); isOpen = false; } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); isOpen = true; } public void onDrawerSlide(View drawerView,float slideOffset){ super.onDrawerSlide(drawerView,slideOffset); if(!isOpen){ setStatusBarColor("#00102b"); } if(isOpen){ setStatusBarColor("#EFEFF0"); } }
sumber
Mendeteksi
DrawerLayout
dibuka, ditutup, slide DrawerLayout.DrawerListenerDrawerLayout drawerLayout: drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { /** * Called when a drawer's position changes. * * @param slideOffset The new offset of this drawer within its range, from 0-1 * Example when you slide drawer from left to right, slideOffset will increase from 0 - 1 (0 when drawer closed and 1 when drawer display full) */ @Override public void onDrawerSlide(@NonNull View drawerView, float slideOffset) { } @Override public void onDrawerOpened(@NonNull View drawerView) { // do something when drawer opened } @Override public void onDrawerClosed(@NonNull View drawerView) { // do something when drawer closed } /** * Called when the drawer motion state changes. The new state will * be one of {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}. */ @Override public void onDrawerStateChanged(int newState) { } });
Periksa Laci dibuka
if(drawerLayout.isDrawerOpen(GravityCompat.START)) // or GravityCompat.END
sumber
Metodenya sama di Kotlin.
Inisialisasi Tampilan DrawerLayout
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
Periksa apakah laci terbuka
if(drawerLayout.isDrawerOpen(GravityCompat.START)){ Log.d("Drawer","open") }
Jika Anda ingin mengambil tindakan secara otomatis saat laci dibuka atau ditutup, Anda dapat melakukan hal berikut.
Dalam aktivitas utama Anda, buat kelas dalam yang merupakan subkelas dari DrawerLayout.DrawerListener . Kelas DrawerLayout mengimplementasikan antarmuka DrawerListener.
inner class CustomDrawer : DrawerLayout.DrawerListener{ override fun onDrawerStateChanged(newState: Int) { } override fun onDrawerSlide(drawerView: View, slideOffset: Float) { imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0) } override fun onDrawerClosed(drawerView: View) { imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0) } override fun onDrawerOpened(drawerView: View) { imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0) } }
Letakkan tindakan Anda dalam fungsi yang ingin Anda gunakan. Dalam contoh saya, saya menutup soft keyboard jika pengguna berinteraksi dengan panel navigasi. Deklarasikan InputMethodManager seperti ini di aktivitas utama Anda:
var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
Tambahkan DrawerListener kustom Anda ke drawerLayout (saya taruh di metode onCreate)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)
sumber
Mungkin, saya terlambat tetapi saya dapat membagikan informasi terbaru yang diperbarui. Dalam kode yang diberikan, saya mengatur buka / tutup laci dalam fungsi onclick. Jika laci terbuka maka akan ditutup jika tidak terbuka. Solusi ini didasarkan pada RXava DrawerLayout
(androidx.drawerlayout.widget.DrawerLayout)
. Dalam kode saya, saya membuka drawerlayout dari kanan ke kiri.@Override public void onClick(View view) { if (drawerLayout.isDrawerVisible(GravityCompat.END)) { drawerLayout.closeDrawer(GravityCompat.END); }else { drawerLayout.openDrawer(GravityCompat.END); } }
Catatan: Jika Anda membuka drawerLayout dari sisi kanan, gunakan "GravityCompat.END" dan buka dari sisi kiri, lalu gunakan "GravityCompat.START" . Nikmati codding .....
sumber