Android automatically changes the width of the navigation bar

I used the navigation box template provided in Android Studio. In the layout of my activity, I have the following code:

<fragment android:id="@+id/navigation_drawer" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:layout_gravity="start" android:name="com.smedilepaolo.newsfeed.NavigationDrawer.NavigationDrawerFragment" tools:layout="@layout/fragment_navigation_drawer" /> 

I need to programmatically change the width of the panel. I think the right zone for changing it is this:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_news_feed); mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.navigation_drawer); mTitle = getTitle(); .... 

But I can’t understand how to achieve my goal.

/ * UPDATE * /

The drawer panel icon does not appear in the action panel

  mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); mDrawerListView.post(new Runnable() { @Override public void run() { Resources resources = getResources(); float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 240, resources.getDisplayMetrics()); DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams(); params.width = (int) (width); mDrawerListView.setLayoutParams(params); } }); selectItem(position); } }); mDrawerListView.post(new Runnable() { @Override public void run() { Resources resources = getResources(); float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, resources.getDisplayMetrics().widthPixels-1, resources.getDisplayMetrics()); DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams(); params.width = (int) (width); mDrawerListView.setLayoutParams(params); mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); mDrawerLayout.openDrawer(mFragmentContainerView); } }); 

What is the selectItem method

  private void selectItem(int position) { mCurrentSelectedPosition = position; if (mDrawerListView != null) { mDrawerListView.setItemChecked(position, true); } if (mDrawerLayout != null) { mDrawerLayout.closeDrawer(mFragmentContainerView); } .... 
+5
source share
1 answer

Based on the code generated in the navigation box template, you can change the width of the panel by adding this code to the onCreateView () method in the NavigationDrawerFragment file.

  mDrawerListView.post(new Runnable() { @Override public void run() { Resources resources = getResources(); float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, resources.getDisplayMetrics()); DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams(); params.width = (int) (width); mDrawerListView.setLayoutParams(params); } }); 

To disable gestures on DrawerLayout:

// NavigationDrawerFragment

 public void setUp(int fragmentId, DrawerLayout drawerLayout) { mDrawerLayout = drawerLayout; mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); } 

To open / close DrawerLayout:

 mDrawerLayout.openDrawer(mDrawerListView); mDrawerLayout.closeDrawer(mDrawerListView); 

To prevent the drawer panel icon from disappearing, change the setOnItemClickListener method as follows:

 mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectItem(position); } }); 

And change the overridden onDrawerClose method as follows:

 @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); if (!isAdded()) { return; } mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); Resources resources = getResources(); float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 240, resources.getDisplayMetrics()); DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams(); params.width = (int) (width); mDrawerListView.setLayoutParams(params); getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() } 
+14
source

Source: https://habr.com/ru/post/1201487/


All Articles