2017-12-06 8 views
1

私はDrawerLayoutを作成しました。しかし、ユーザーが背景に触れたときに閉じてほしい。これはDrawerLayoutlistViewで実装できますが、ここではNavigationViewを使用しています。それで、これを達成する方法はありますか?ここでAndroid DrawerLayoutを外に触れたときに、それを閉じるにはどうすればよいですか?

は、メニューのレイアウトは、私もthis質問に見てきました。ここここJavaコード

public class ParentActivity extends AppCompatActivity { 

    private NavigationView mNavigationView; 
    private User mCurrentUser; 
    private UserLocalStore mUserLocalStore; 
    private CircleImageView mProfilePic; 
    private TextView mProfileName; 
    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mToggle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_parent); 

     mUserLocalStore = new UserLocalStore(this); 
     mCurrentUser = mUserLocalStore.getUserDetails(); 

     mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer); 
     mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close); 
     mDrawerLayout.addDrawerListener(mToggle); 
     mToggle.syncState(); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     mNavigationView = (NavigationView)findViewById(R.id.navigationView); 
     setNavigationViewMenu(mCurrentUser.userType); 
     mProfileName = (TextView) mNavigationView.getHeaderView(0).findViewById(R.id.profileName); 
     mProfileName.setText(mCurrentUser.getName()); 
     mProfilePic = (CircleImageView) mNavigationView.getHeaderView(0).findViewById(R.id.circleImageProfile); 
     Picasso.with(this).load("https://www.sonypark360.net/wp-content/uploads/2017/08/profile-pictures.png").into(mProfilePic); 

     mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       mDrawerLayout.closeDrawers(); 
       return false; 
      } 
     }); 

    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(mToggle.onOptionsItemSelected(item)){ 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 



    private void setNavigationViewMenu(String userType) { 
     switch (userType){ 
      case "s": 
       mNavigationView.inflateMenu(R.menu.menu_student_navigation_drawer); 
       break; 
      case "pa": 
       mNavigationView.inflateMenu(R.menu.menu_parent_navigation_drawer); 
       break; 
      case "pr": 
       mNavigationView.inflateMenu(R.menu.menu_principal_navigation_drawer); 
       break; 
      case "t": 
       mNavigationView.inflateMenu(R.menu.menu_teacher_navigation_drawer); 
       break; 
     } 
    } 
} 

DrawerLayoutコード

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.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/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.mlpj.www.morascorpions.ParentActivity"> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigationView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/navigation_header_layout" 

     > 
    </android.support.design.widget.NavigationView> 
</android.support.v4.widget.DrawerLayout> 

ですNavigationView

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/home" android:title="Home Parent" android:icon="@drawable/ic_home_black"/> 
    <item android:id="@+id/send" android:title="Send" android:icon="@drawable/ic_send_black"/> 
    <item android:id="@+id/add" android:title="Add" android:icon="@drawable/ic_add_black"/> 
</menu> 

のためでありますしかし、それは私の問題を解決しません。

+3

をお試しくださいあなたのものがそうでない場合、それはおそらくレイアウトの問題です。 –

+1

あなたのアクティビティに引き出しがあり、それがデフォルトの動作である場合、マイクが正しいです。ドロワーの設定を確認してください。 – ADM

+1

レイアウトを表示すると、あなたの引き出しを定義するレイアウトに問題がある可能性があります – Jacky

答えて

4

`DrawerLayout`がすでにかかわらず、あなたは正しく設定している場合は、引き出しのために使用するもののことを行います。この

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    Rect viewRect = new Rect(); 
    mNavigationView.getGlobalVisibleRect(viewRect); 


    if (!viewRect.contains((int) ev.getRawX(), (int) ev.getRawY())) { 

     //hide your navigation view here. 

    } 
    return super.dispatchTouchEvent(ev);; 
} 
+0

こんにちはハルサド、それは私のために働いていません – MLPJ

+0

コメント。それは実際に働いた。おかげでたくさんのHarshad – MLPJ

+0

しかし、まだMike.M、ADMとジャッキーのデフォルトの動作の考えを探して – MLPJ

関連する問題