2013-07-25 24 views
16

Tôi hiện đang tìm hiểu về Navigation Drawer từ trang android, và tôi đang sử dụng ví dụ của họ http://developer.android.com/training/implementing-navigation/nav-drawer.htmlAdd (mở/đóng) nút để hoạt động cho (mở/đóng) điều hướng ngăn kéo

Những gì tôi muốn là để thêm một nút trong số MainActivity để có thể mở NavigationDrawer. Tôi cần phải làm điều đó theo lập trình, không phải trong XML. Làm thế nào tôi có thể làm điều đó?

Trả lời

37

Tạo phương thức trong MainActivity có chứa ngăn kéo của bạnLễ hết.

public void open() 
{ 
    mDrawerLayout.openDrawer(Gravity.LEFT); 
} 


và từ đoạn bạn Trong oncreateView() phương pháp Như bạn muốn nút mới lập trình thêm nút ở gốc thổi phồng bố trí của bạn. mảnh của bạn có nút
dưới đây tôi sửa đổi đoạn thử

public static class PlanetFragment extends Fragment { 
    public static final String ARG_PLANET_NUMBER = "planet_number"; 

    public PlanetFragment() { 
     // Empty constructor required for fragment subclasses 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_planet, container, false); 
     int i = getArguments().getInt(ARG_PLANET_NUMBER); 
     String planet = getResources().getStringArray(R.array.planets_array)[i]; 

     int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()), 
         "drawable", getActivity().getPackageName()); 
     ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId); 
     getActivity().setTitle(planet); 
     RelativeLayout root=(RelativeLayout)rootView.findViewById(R.id.root); 
     Button button=new Button(getActivity());    
     LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     button.setLayoutParams(params); 
     params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
     button.setText("openDrawer"); 
     root.addView(button); 

     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       ((MainActivity)getActivity()).open(); 
      } 
     }); 
     return rootView; 
    } 
    } 
} 


Bạn có thể thử mã này trong đoạn của bạn ..

+0

nhưng làm cách nào để thêm nút? –

+0

Trong câu trả lời tôi chưa thêm nút vào hoạt động nhưng theo phân đoạn, Vì vậy, bạn có thể truy cập Ngăn kéo từ bất kỳ phân đoạn nào và từ bất kỳ sự kiện nhấp nào bằng cách gọi phương thức open() hoạt động. – Pravin

+0

cảm ơn bạn đã thực hiện công việc –

12

Tạo Nút của bạn trong onCreate(Bundle) phương pháp:

Button button = new Button(this); 

Tìm của bạn DrawerLayout:

mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout_id); 

Set một OnClickListener vào nút này:

button.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { 
     mDrawerLayout.openDrawer(Gravity.LEFT); 
    } 
) 

này sẽ cung cấp cho bạn một ngăn kéo rỗng. Nếu bạn có một View mà bạn muốn đặt bên trong ngăn kéo, thay thế:

mDrawerLayout.openDrawer(Gravity.LEFT); 

với:

mDrawerLayout.openDrawer(myCustomView); 

Nếu bạn muốn nút để chuyển đổi ngăn kéo (đóng ngăn kéo nếu mở của nó hay , mở nó nếu khép kín của nó) sử dụng sau đây OnClickListener:

button.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { 
     if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { 
      mDrawerLayout.closeDrawer(Gravity.LEFT); 
     } else { 
      mDrawerLayout.openDrawer(Gravity.LEFT); 
     } 
    } 
) 

Nếu bạn đang sử dụng một giao diện tùy chỉnh, sử dụng này OnClickListener:

button.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { 
     if (mDrawerLayout.isDrawerOpen(myCustomView)) { 
      mDrawerLayout.closeDrawer(myCustomView); 
     } else { 
      mDrawerLayout.openDrawer(myCustomView); 
     } 
    } 
) 
+0

nút vẫn không thấy được –

+0

@SartherisStormhammer Bạn có thể đăng tệp xml bố cục của mình không? Cái mà bạn sử dụng trong 'setContentView()'? – Vikram

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