web-dev-qa-db-ja.com

ナビゲーションドロワーの(開く/閉じる)アクティビティに(開く/閉じる)ボタンを追加する

私は現在、Androidサイトからナビゲーションドロワーについて学び、その例を使用しています http://developer.Android.com/training/implementing-navigation/nav- draw.html

私が欲しいのは、MainActivityを開くことができるボタンをNavigationDrawerに追加することです。 XMLではなく、プログラムで行う必要があります。どうやってやるの?

17

MainActivityに、drawerLayoutを含むメソッドを作成します。

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


そしてあなたのフラグメントからoncreateView()メソッドで新しいボタンが欲しいので、プログラムでルートのインフレートされたレイアウトにボタンを追加します。あなたのフラグメントにはボタンがあります
以下のフラグメントの変更を試してみます

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


フラグメントでこのコードを試すことができます。

38
Pravin

onCreate(Bundle)メソッドでボタンを作成します。

Button button = new Button(this);

DrawerLayoutを見つけます:

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

このボタンにOnClickListenerを設定します。

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

これはあなたに空の引き出しを与えます。引き出しの中に置きたいViewがある場合は、次のものを置き換えます。

mDrawerLayout.openDrawer(Gravity.LEFT);

と:

mDrawerLayout.openDrawer(myCustomView);

ボタンで引き出しを切り替えたい場合(開いている場合は引き出しを閉じるか、閉じている場合は開く)次のOnClickListenerを使用します。

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

カスタムビューを使用している場合は、次のOnClickListenerを使用します。

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