java - 如何向 Android 应用程序抽屉添加按钮、开关等?

标签 java android eclipse android-activity android-actionbar

如何向 Android 应用程序抽屉添加按钮、开关、搜索栏等? 我知道如何向 ListView 添加文本,但我发现上述内容非常困难。下面有我当前的应用程序抽屉。您建议进行哪些更改来实现上述目标。

代码:

主要 Activity

   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>

最佳答案

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

或者,如果您想要这个抽屉,则放置一个线性布局,然后将 View 放入其中。

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

现在在侧面板布局中将您的 View 放在一侧,现在对于 View 侧面板使用以下内容:

@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 中的示例。

关于java - 如何向 Android 应用程序抽屉添加按钮、开关等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316957/

相关文章:

java - 将原始 int、long、double 收集到列表中的最佳方法

java - 将泛型列表转换为子类型(不安全逆变)

java - 添加 fragment 时出现 Glide 库错误或应用程序崩溃,并且还显示该特定问题的图像

android - 使用 HttpPost MultiPartEntityBuilder 上传照片

android - cordova-2.7.0.jar 在哪里?

java - 附加调试器(使用 eclipse) Play Framework 失败

java - 两个作业之间共享表

使用密码时Java POI异常: The part/xl/styles. xml无法保存在流中

android - Activity 流程

java - 如何组织我的 Java 7 Eclipse GWT 项目?