设置图像视图以打开 sidebar/menu android

Setup an imageview to open sidebar/menu android

没有使用actionbar和设置图标,我不能在这里使用actionbar。我真正想做的是设置一个图像视图,它响应用户的点击。单击时,sidebar/menu会打开或关闭,就像在android phone.
按钮处单击物理按钮一样。 有什么简单的方法吗? (侧边栏中的所有项目都已经完成并且工作正常。我通过单击 phone 上的物理菜单按钮进行了检查)

觉得值得将此示例的代码放在 GitHub 上,因为它变得很长:

只需将 OnClickListener 设置为 ImageView,方法与 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);
    } 
}

您可能希望将 android:clickable = "true" 添加到 ImageViewxml,并 android:background="?android:attr/selectableItemBackground" 以在单击项目时获得反馈。

这假设您已将 DrawerLayout 设置为如下所示:

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

编辑: 如果你想要更多的控制,你可以用 state list drawable 为你的 ImageView 定义各种状态,并在 android:background 中使用它而不是上面的建议。使用以下模板在 drawable 文件夹(即 custom_selector.xml)中创建一个新的 xml 文件:

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

并为按下、focused/hover和正常状态定义相关图像。应用它:

android:background="@drawable/custom_selector"

基于 PPartisan 的回答,假设您的 Activity 是 MainActivity:

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