タイトルはそれをすべて説明します。ナビゲーションドロワーが開いているかどうかを確認するだけです。私はネットでたくさん検索して、方法を見つけましたisDrawerOpen(int drawerGravity)
が、それを方法で使用する方法を説明する満足のいく答えを見つけることができませんでした。誰かが私にそれを説明してくれるとありがたいです。
前もって感謝します!
タイトルはそれをすべて説明します。ナビゲーションドロワーが開いているかどうかを確認するだけです。私はネットでたくさん検索して、方法を見つけましたisDrawerOpen(int drawerGravity)
が、それを方法で使用する方法を説明する満足のいく答えを見つけることができませんでした。誰かが私にそれを説明してくれるとありがたいです。
前もって感謝します!
回答:
xmlで引き出しレイアウトを定義していると仮定します。
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
...
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
//drawer is open
}
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);
そのリスナーの使用:)
使用する:
mDrawerLayout.isDrawerOpen()メソッド
例:
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
mDrawerLayout.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer!
}else{
mDrawerLayout.openDrawer(Gravity.LEFT); //OPEN Nav Drawer!
}
次の方法で、引き出しが開いているか閉じているかを確認できます。
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
shakeJの答えは正解です。onDrawerSlideを使用して他の関数を起動できることを覚えておいてください。たとえば、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");
}
}
DrawerLayout
開いた、閉じた、スライドを検出するDrawerLayout.DrawerListener
DrawerLayout 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) {
}
});
ドロワーが開いていることを確認してください
if(drawerLayout.isDrawerOpen(GravityCompat.START)) // or GravityCompat.END
この方法はKotlinでも同じです。
DrawerLayoutビューを初期化する
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
引き出しが開いているかどうかを確認します
if(drawerLayout.isDrawerOpen(GravityCompat.START)){
Log.d("Drawer","open")
}
引き出しを開いたり閉じたりしたときに自動的にアクションを実行したい場合は、次の操作を実行できます。
メインアクティビティで、DrawerLayout.DrawerListenerのサブクラスである内部クラスを作成します。DrawerLayoutクラスは、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)
}
}
使用する関数にアクションを配置します。私の例では、ユーザーがナビゲーションドロワーを操作した場合、ソフトキーボードを閉じています。メインアクティビティで次のようにInputMethodManagerを宣言します。
var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
カスタムDrawerListenerをdrawerLayoutに追加します(私はonCreateメソッドに入れました)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)
遅れているかもしれませんが、更新された新しい情報を共有できます。与えられたコードで、私はonclick関数で引き出しを開く/閉じるを設定しました。引き出しが開いている場合は閉じられ、それ以外の場合は開かれ(androidx.drawerlayout.widget.DrawerLayout)
ます。私のコードでは、drawerlayoutを右から左に開きます。
@Override
public void onClick(View view) {
if (drawerLayout.isDrawerVisible(GravityCompat.END)) {
drawerLayout.closeDrawer(GravityCompat.END);
}else {
drawerLayout.openDrawer(GravityCompat.END);
}
}
注:drawLayoutを右側から開いて「GravityCompat.END」を使用し、左側から開いている場合は、「GravityCompat.START」を使用してください。コーディングをお楽しみください。
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList)
。mDrawerLayoutは引き出しで、mDrawerListは、リストビューで