2015-06-26 21 views
5

Ich habe eine Navigationsvorlage heruntergeladen, und ich möchte die Breite der Navigation anpassen. Ich habe verschiedene Methoden ausprobiert, aber ich denke nichts passt. Wie kann ich mein Problem lösen? Ich kann die Breite der Navigationsleiste nicht anpassen.So passen Sie die Breite der Navigationsleiste in Android Studio

Dies ist mein Code für die 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; 
    } 

} 
} 

Antwort

1

einen Blick in die Aktivitäten Nehmen Sie das Layout -datei waren Sie zunächst ordnen die NavigationDrawer. Neben einigen anderen Informationen sollten Sie einen Abschnitt suchen finden wie diesen

<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" /> 

Den Tag android:layout_width Ihre Schublade Breite definiert und an die Dimensionen -Dateien verknüpft ist. Wenn Sie dort zu suchen (cmd/Strg + Klick) Sie können diesen Wert nachzuschlagen oder neu zu definieren:

<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> 

Natürlich können Sie die Breite direkt in der Layout -Dateien setzen.

1

Gehen Sie zu den Werten \ 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

Sie können jetzt die 250dp Ändern Sie die 250dp auf Ihre gewünschte Breite – KennethLazos

1

Ändern Sie die Breite in der Navigationsansicht direkt.

<android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="350dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_actual_home" 
     app:menu="@menu/activity_actual_home_drawer" /> 

Für z Ich habe die widt bis 350 dp direkt in meiner Layout-Datei wie oben geändert.

Verwandte Themen