设置imageview打开侧边栏/菜单android

时间:2015-08-10 14:45:35

标签: android menu imageview sidebar

我没有使用动作栏和设置图标,而是在这里使用动作栏。我真正想要做的是设置一个imageview,它响应用户的点击。单击时,侧边栏/菜单将打开或关闭,就像点击Android手机按钮上的物理按钮一样 有没有简单的方法呢? (侧边栏中的所有项目都已完成并且工作正常。我通过点击手机上的物理菜单按钮进行了检查)

2 个答案:

答案 0 :(得分:2)

感觉值得将此示例的代码放在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"添加到xml的{​​{1}}和ImageView,以便在点击该项目时获得反馈。

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

android:background="?android:attr/selectableItemBackground"

修改 如果您想要更多控制权,可以使用state list drawablepublic 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); } 定义各种状态,并在ImageView中使用它而不是上述建议。使用以下模板在android:background文件夹(即xml)中创建新的drawable文件:

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

答案 1 :(得分:1)

以PPartisan的答案为基础,并假设您的活动是MainActivity:

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