【问题标题】:How do I add buttons, switches etc. to an android app drawer?如何将按钮、开关等添加到 android 应用程序抽屉?
【发布时间】:2014-03-11 05:10:53
【问题描述】:

如何将按钮、开关、搜索栏等添加到 Android 应用程序抽屉? 我知道如何将文本添加到列表视图,但我发现上述内容非常困难。我在下面有我当前的应用程序抽屉。您建议进行哪些更改来完成上述操作。

代码:

MainActivity

   public class MainActivity extends Activity {

        // Within which the entire activity is enclosed
        DrawerLayout mDrawerLayout;

        // ListView represents Navigation Drawer
        ListView mDrawerList;

        // ActionBarDrawerToggle indicates the presence of Navigation Drawer in the action bar
        ActionBarDrawerToggle mDrawerToggle;

        // Title of the action bar
        String mTitle="";

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            mTitle = (String) getTitle();

            // Getting reference to the DrawerLayout
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

            mDrawerList = (ListView) findViewById(R.id.drawer_list);

            // Getting reference to the ActionBarDrawerToggle
            mDrawerToggle = new ActionBarDrawerToggle( this,
                mDrawerLayout,
                R.drawable.ic_drawer,
                R.string.drawer_open,
                R.string.drawer_close){

                    /** Called when drawer is closed */
                    public void onDrawerClosed(View view) {
                        getActionBar().setTitle(mTitle);
                        invalidateOptionsMenu();
                    }

                    /** Called when a drawer is opened */
                    public void onDrawerOpened(View drawerView) {
                        getActionBar().setTitle("Select a river");
                        invalidateOptionsMenu();
                    }
            };

            // Setting DrawerToggle on DrawerLayout
            mDrawerLayout.setDrawerListener(mDrawerToggle);

            // Creating an ArrayAdapter to add items to the listview mDrawerList
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                getBaseContext(),
                R.layout.drawer_list_item ,
                getResources().getStringArray(R.array.rivers)
            );

            // Setting the adapter on mDrawerList
            mDrawerList.setAdapter(adapter);

            // Enabling Home button
            getActionBar().setHomeButtonEnabled(true);

            // Enabling Up navigation
            getActionBar().setDisplayHomeAsUpEnabled(true);

            // Setting item click listener for the listview mDrawerList
            mDrawerList.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent,
                    View view,
                    int position,
                    long id) {

                        // Getting an array of rivers
                        String[] rivers = getResources().getStringArray(R.array.rivers);

                        //Currently selected river
                        mTitle = rivers[position];

                        // Creating a fragment object
                        RiverFragment rFragment = new RiverFragment();

                        // Creating a Bundle object
                        Bundle data = new Bundle();

                        // Setting the index of the currently selected item of mDrawerList
                        data.putInt("position", position);

                        // Setting the position to the fragment
                        rFragment.setArguments(data);

                        // Getting reference to the FragmentManager
                        FragmentManager fragmentManager = getFragmentManager();

                        // Creating a fragment transaction
                        FragmentTransaction ft = fragmentManager.beginTransaction();

                        // Adding a fragment to the fragment transaction
                        ft.replace(R.id.content_frame, rFragment);

                        // Committing the transaction
                        ft.commit();

                        // Closing the drawer
                        mDrawerLayout.closeDrawer(mDrawerList);
                }
            });
        }

        @Override
        protected void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            mDrawerToggle.syncState();
        }

        /** Handling the touch event of app icon */
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (mDrawerToggle.onOptionsItemSelected(item)) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }

        /** Called whenever we call invalidateOptionsMenu() */
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            // If the drawer is open, hide action items related to the content view
            boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);

            menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
            return super.onPrepareOptionsMenu(menu);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    }

Activity_Layout

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/drawer_list"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

【问题讨论】:

    标签: java android eclipse android-activity android-actionbar


    【解决方案1】:

    您可以将此库用于您的抽屉library

    或者如果你想要这个抽屉然后放一个线性布局然后把你的视图放在里面。

     SlidingMenu menu = new SlidingMenu(this);
     menu.setMode(SlidingMenu.LEFT);
     menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
     menu.setShadowWidthRes(R.dimen.shadow_width);
     menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
     menu.setFadeDegree(0.35f);
     menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
     menu.setMenu(R.layout.side_panel);
    

    现在在侧面板布局中将您的视图放在现在用于视图侧面板的一侧:

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId) {
        case android.R.id.home:
            if (menu != null) {
                menu.toggle();
            } 
            break;
        }
        return true;
    }
    

    要初始化侧面板数据,请使用:

    menu.findViewById(R.id.your_view_id).setOnClickListener(this);
    

    并覆盖 onclick 事件并处理您想要的。

    有关更多信息,请参阅 github 中的示例。

    【讨论】:

    • 虽然这听起来很简单,但请您举个例子。所以我可以理解它吗?
    • 我确定我遗漏了一些东西,但我真的不明白上面的内容。这如何使我能够将按钮、开关等添加到 android 应用程序抽屉?跨度>
    • menu.setMenu(R.layout.side_panel);在这个布局中放置您的按钮、开关等和所有东西。
    • 如果您仍然不明白,请从 github 下载代码并运行 zip 中给出的示例。
    • 我没有使用libraryslidingMenu,我不知道这是否适合上面的程序。同样,方法 onMenuItemSelected 不是上述的一部分。这与我上面表达的代码有何联系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多