设置图像视图以打开 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"
添加到 ImageView
的 xml
,并 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();
}
没有使用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"
添加到 ImageView
的 xml
,并 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();
}