2015-06-26 22 views
5

Tôi đã tải xuống mẫu điều hướng và tôi muốn điều chỉnh chiều rộng của điều hướng. Tôi đã thử các phương pháp khác nhau nhưng tôi nghĩ không có gì phù hợp. Làm thế nào tôi có thể giải quyết vấn đề của tôi? Tôi không thể điều chỉnh chiều rộng của ngăn điều hướng.Cách điều chỉnh chiều rộng của ngăn điều hướng trong studio android

Đây là mã của tôi cho 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; 
    } 

} 
} 

Trả lời

1

Hãy xem trong bố trí của Hoạt động -file là bạn trước hết là giao NavigationDrawer. Bên cạnh một vài thông tin khác mà bạn nên tìm một phần tìm kiếm như thế này

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

Thẻ android:layout_width xác định chiều rộng của ngăn kéo của bạn và nó được liên kết với các kích thước -file. Nếu bạn nhìn ở đó (cmd/ctrl + click), bạn có thể tra cứu hoặc xác định lại giá trị này:

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

Tất nhiên bạn có thể thiết lập độ rộng trực tiếp trong bố trí -file quá.

1

Đến các giá trị \ 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

Bây giờ bạn có thể thay đổi 250dp Thay đổi 250dp theo chiều rộng mong muốn của bạn – KennethLazos

1

Thay đổi độ rộng trong giao diện điều hướng trực tiếp.

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

Ví dụ: tôi đã thay đổi widt thành 350 dp ngay trong tệp bố cục như trên.

Các vấn đề liên quan