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