2015-06-26 12 views
5

Ho scaricato un modello di navigazione e voglio regolare la larghezza della navigazione. Ho provato diversi metodi, ma penso che non sia adatto. Come posso risolvere il mio problema? Non riesco a regolare la larghezza del cassetto di navigazione.Come regolare la larghezza del cassetto di navigazione in Android Studio

Questo è il mio codice per il NavigationalDrawerFragment.java

package com.example.user.navigationkamo; 

import android.app.Activity; 
import android.app.Fragment; 
import android.content.SharedPreferences; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapShader; 
import android.graphics.Canvas; 
import android.graphics.ColorFilter; 
import android.graphics.Paint; 
import android.graphics.PixelFormat; 
import android.graphics.Rect; 
import android.graphics.RectF; 
import android.graphics.Shader; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.TypedValue; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Fragment used for managing interactions for and presentation of a navigation drawer. 
* See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction"> 
* design guidelines</a> for a complete explanation of the behaviors implemented here. 
*/ 
public class NavigationDrawerFragment extends Fragment implements NavigationDrawerCallbacks { 

/** 
* Remember the position of the selected item. 
*/ 
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; 

/** 
* Per the design guidelines, you should show the drawer on launch until the user manually 
* expands it. This shared preference tracks this. 
*/ 
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; 

/** 
* A pointer to the current callbacks instance (the Activity). 
*/ 
private NavigationDrawerCallbacks mCallbacks; 

/** 
* Helper component that ties the action bar to the navigation drawer. 
*/ 
private ActionBarDrawerToggle mActionBarDrawerToggle; 

private DrawerLayout mDrawerLayout; 
private RecyclerView mDrawerList; 
private View mFragmentContainerView; 

private int mCurrentSelectedPosition = 0; 
private boolean mFromSavedInstanceState; 
private boolean mUserLearnedDrawer; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Read in the flag indicating whether or not the user has demonstrated awareness of the 
    // drawer. See PREF_USER_LEARNED_DRAWER for details. 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); 

    if (savedInstanceState != null) { 
     mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); 
     mFromSavedInstanceState = true; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
    mDrawerList = (RecyclerView) view.findViewById(R.id.drawerList); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    mDrawerList.setLayoutManager(layoutManager); 
    mDrawerList.setHasFixedSize(true); 

    final List<NavigationItem> navigationItems = getMenu(); 
    NavigationDrawerAdapter adapter = new NavigationDrawerAdapter(navigationItems); 
    adapter.setNavigationDrawerCallbacks(this); 
    mDrawerList.setAdapter(adapter); 
    selectItem(mCurrentSelectedPosition); 
    return view; 
} 

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



public boolean isDrawerOpen() { 

    return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); 
} 

public ActionBarDrawerToggle getActionBarDrawerToggle() { 
    return mActionBarDrawerToggle; 
} 

public DrawerLayout getDrawerLayout() { 
    return mDrawerLayout; 
} 

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    selectItem(position); 
} 

public List<NavigationItem> getMenu() { 
    List<NavigationItem> items = new ArrayList<NavigationItem>(); 
    items.add(new NavigationItem("Driver Details", getResources().getDrawable(R.drawable.ic_driver))); 
    items.add(new NavigationItem("Track Me", getResources().getDrawable(R.drawable.ic_track))); 
    items.add(new NavigationItem("Contact", getResources().getDrawable(R.drawable.ic_contact))); 
    items.add(new NavigationItem("Report Driver", getResources().getDrawable(R.drawable.ic_report))); 
    items.add(new NavigationItem("Call for Emergency", getResources().getDrawable(R.drawable.ic_call))); 
    items.add(new NavigationItem("Rate Taxi", getResources().getDrawable(R.drawable.ic_rate))); 
    items.add(new NavigationItem("Favorites", getResources().getDrawable(R.drawable.ic_favorite))); 
    items.add(new NavigationItem("Top Drivers", getResources().getDrawable(R.drawable.ic_top))); 
    items.add(new NavigationItem("Security Tips", getResources().getDrawable(R.drawable.ic_security))); 
    return items; 
} 

/** 
* Users of this fragment must call this method to set up the navigation drawer interactions. 
* 
* @param fragmentId The android:id of this fragment in its activity's layout. 
* @param drawerLayout The DrawerLayout containing this fragment's UI. 
* @param toolbar  The Toolbar of the activity. 
*/ 
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
    mFragmentContainerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 

    mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.myPrimaryDarkColor)); 

    mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { 
     @Override 
     public void onDrawerClosed(View drawerView) { 


      super.onDrawerClosed(drawerView); 
      if (!isAdded()) return; 

      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 

      super.onDrawerOpened(drawerView); 
      if (!isAdded()) return; 
      if (!mUserLearnedDrawer) { 
       mUserLearnedDrawer = true; 
       SharedPreferences sp = PreferenceManager 
         .getDefaultSharedPreferences(getActivity()); 
       sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); 
      } 
      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 
    }; 

    // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, 
    // per the navigation drawer design guidelines. 
    if (!mUserLearnedDrawer && !mFromSavedInstanceState) { 
     mDrawerLayout.openDrawer(mFragmentContainerView); 
    } 

    // Defer code dependent on restoration of previous instance state. 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mActionBarDrawerToggle.syncState(); 
     } 
    }); 

    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); 
} 

private void selectItem(int position) { 
    mCurrentSelectedPosition = position; 
    if (mDrawerLayout != null) { 
     mDrawerLayout.closeDrawer(mFragmentContainerView); 
    } 
    if (mCallbacks != null) { 
     mCallbacks.onNavigationDrawerItemSelected(position); 
    } 
    ((NavigationDrawerAdapter) mDrawerList.getAdapter()).selectPosition(position); 
} 

public void openDrawer() { 
    mDrawerLayout.openDrawer(mFragmentContainerView); 
} 

public void closeDrawer() { 
    mDrawerLayout.closeDrawer(mFragmentContainerView); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mCallbacks = (NavigationDrawerCallbacks) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mCallbacks = null; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Forward the new configuration the drawer toggle component. 
    mActionBarDrawerToggle.onConfigurationChanged(newConfig); 
} 

public void setUserData(String user, String email, Bitmap avatar) { 
    ImageView avatarContainer = (ImageView) mFragmentContainerView.findViewById(R.id.imgAvatar); 
    ((TextView) mFragmentContainerView.findViewById(R.id.txtUserEmail)).setText(email); 
    ((TextView) mFragmentContainerView.findViewById(R.id.txtUsername)).setText(user); 
    avatarContainer.setImageDrawable(new RoundImage(avatar)); 
} 

public View getGoogleDrawer() { 
    return mFragmentContainerView.findViewById(R.id.googleDrawer); 
} 

public static class RoundImage extends Drawable { 
    private final Bitmap mBitmap; 
    private final Paint mPaint; 
    private final RectF mRectF; 
    private final int mBitmapWidth; 
    private final int mBitmapHeight; 

    public RoundImage(Bitmap bitmap) { 
     mBitmap = bitmap; 
     mRectF = new RectF(); 
     mPaint = new Paint(); 
     mPaint.setAntiAlias(true); 
     mPaint.setDither(true); 
     final BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
     mPaint.setShader(shader); 

     mBitmapWidth = mBitmap.getWidth(); 
     mBitmapHeight = mBitmap.getHeight(); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     canvas.drawOval(mRectF, mPaint); 
    } 

    @Override 
    protected void onBoundsChange(Rect bounds) { 
     super.onBoundsChange(bounds); 
     mRectF.set(bounds); 
    } 

    @Override 
    public void setAlpha(int alpha) { 
     if (mPaint.getAlpha() != alpha) { 
      mPaint.setAlpha(alpha); 
      invalidateSelf(); 
     } 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
     mPaint.setColorFilter(cf); 
    } 

    @Override 
    public int getOpacity() { 
     return PixelFormat.TRANSLUCENT; 
    } 

    @Override 
    public int getIntrinsicWidth() { 
     return mBitmapWidth; 
    } 

    @Override 
    public int getIntrinsicHeight() { 
     return mBitmapHeight; 
    } 

    public void setAntiAlias(boolean aa) { 
     mPaint.setAntiAlias(aa); 
     invalidateSelf(); 
    } 

    @Override 
    public void setFilterBitmap(boolean filter) { 
     mPaint.setFilterBitmap(filter); 
     invalidateSelf(); 
    } 

    @Override 
    public void setDither(boolean dither) { 
     mPaint.setDither(dither); 
     invalidateSelf(); 
    } 

    public Bitmap getBitmap() { 
     return mBitmap; 
    } 

} 
} 

risposta

1

Date un'occhiata nel layout del Activity -file erano voi in primo luogo assegna il NavigationDrawer. Accanto a qualche altra informazione si dovrebbe trovare una sezione simile a questo

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

Il tag android:layout_width definisce la larghezza del cassetto e che sia legata alle dimensioni -File. Se si guarda lì (cmd/Ctrl + clic) è possibile cercare o ridefinire questo valore:

<resources> 
<!-- Default screen margins, per the Android Design guidelines. --> 
<dimen name="activity_horizontal_margin">16dp</dimen> 
<dimen name="activity_vertical_margin">16dp</dimen> 

<!-- Per the design guidelines, navigation drawers should be between 240dp and 320dp: 
    https://developer.android.com/design/patterns/navigation-drawer.html --> 
<dimen name="navigation_drawer_width">240dp</dimen> 

Naturalmente è possibile impostare la larghezza direttamente nella layout di -file troppo.

1

Vai ai valori \ dimens.xml

<resources> 
    <!-- Default screen margins, per the Android Design guidelines. --> 
    <dimen name="activity_horizontal_margin">16dp</dimen> 
    <dimen name="activity_vertical_margin">16dp</dimen> 

    <!-- Per the design guidelines, navigation drawers should be between 240dp and 320dp: 
    https://developer.android.com/design/patterns/navigation-drawer.html -->`enter code here 
<dimen name="navigation_drawer_width">250dp</dimen> 
<dimen name="toolbar_elevation">4dp</dimen> 

+0

Ora è possibile modificare 250dp Modificare 250dp alla larghezza desiderata – KennethLazos

1

modificare la larghezza in vista di navigazione direttamente.

Ad esempio ho modificato la larghezza a 350 dp direttamente nel file di layout come sopra.

Problemi correlati