Setup an imageview to open sidebar/menu android

徘徊边缘 提交于 2019-12-25 16:24:15

问题


Instead of using actionbar and setting up an icon, I could not use actionbar here. What I really want to do is to setup an imageview, which responds to user's click. When it is clicked, sidebar/menu will open or close, just like clicking on physical button at the button of android phone.
Is there any easy way to do so? (all the items in the sidebar are already done and work fine. I checked it by clicking on physical menu button on my phone)


回答1:


Felt worthwhile to put the code for this example up on GitHub, as it was getting quite long:

Just set an OnClickListener to your ImageView, in the same way you would a Button.

ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setOnClickListener(this);
//...
@Override
public void onClick(View v) {
    if(!mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
        mDrawerLayout.openDrawer(GravityCompat.START);
    } else {
        mDrawerLayout.closeDrawer(GravityCompat.START);
    } 
}

You may want to add android:clickable = "true" to the xml for your ImageView, and android:background="?android:attr/selectableItemBackground" to gain feedback when the item is clicked.

This assumes you've set up your DrawerLayout somewhat like the following:

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout = null;
    private ActionBarDrawerToggle mActionBarDrawerToggle = null;
    private RecyclerView mRecyclerView = null;
    private NavMenuAdapter adapter = null;

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 0, 0);
        mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);

        mRecyclerView = (RecyclerView) findViewById(R.id.navigation_menu_recycler);

        adapter = new NavMenuAdapter();
        mRecyclerView.setAdapter(adapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        imageView = (ImageView) findViewById(R.id.image_view);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
                    mDrawerLayout.openDrawer(GravityCompat.START);
                } else {
                    mDrawerLayout.closeDrawer(GravityCompat.START);
                }
            }
        });

    }

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

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mActionBarDrawerToggle.onConfigurationChanged(newConfig);
    }

Edit: If you would like more control, you can define various states for your ImageView with a state list drawable, and use it in android:background instead of the above suggestion. Create a new xml file in your drawable folder (i.e. custom_selector.xml) with the following template:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/image_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/image_focused"
          android:state_focused="true" />
    <item android:drawable="@drawable/image_normal" />
</selector>

And define relevant images for pressed, focused/hover and normal states. Apply it with:

android:background="@drawable/custom_selector"



回答2:


Building on PPartisan's answer, and assuming your Activity is MainActivity:

ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setOnClickListener(this);
//...
@Override
public void onClick(View v) {
   MainActivity.this.openOptionsMenu();
}  


来源:https://stackoverflow.com/questions/31922597/setup-an-imageview-to-open-sidebar-menu-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!