本文共 4395 字,大约阅读时间需要 14 分钟。
菜单 | 显示菜单 | 事件监听 |
---|---|---|
系统菜单 | onCreateOptionsMenu | onOptionsItemSelected |
上下文菜单 | AlertDialog.Builder() | setSingleChoiceItems() |
1.在res下面创建一个menu文件夹,并新建一个xml文件作为OptionMenu的布局文件
2.Activity重写onCreateOptionsMenu加载资源文件
3.Activity重写onOptionsItemSelected加设置事件监听
//步骤2:Activity重写onCreateOptionsMenu加载资源文件 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options_menu,menu); return super.onCreateOptionsMenu(menu); } //步骤3:Activity重写onOptionsItemSelected设置事件监听 @Override public boolean onOptionsItemSelected(MenuItem item) { int id=item.getItemId(); switch (id){ case R.id.blue: textView.setTextColor(Color.parseColor("#2239A2")); break; case R.id.green: textView.setTextColor(Color.parseColor("#1BA233")); break; case R.id.red: textView.setTextColor(Color.parseColor("#A21C31")); break; } return super.onOptionsItemSelected(item); }
注意:一个Activity只有一个系统菜单
1.在res下面创建一个menu文件夹,并新建一个xml文件作为ContextMenu的布局文件,我们复用上面的menu布局
2.Activity重写onCreateConextMenu加载资源文件 3.Activity重写onConextItemSelected设置事件监听 4.为控件添加长按属性并将菜单绑定到这个控件上:registerForContextMenu(控件)
public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.text); //TODO 为控件添加长按属性并将菜单绑定到这个控件上 registerForContextMenu(textView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { getMenuInflater().inflate(R.menu.options_menu, menu); super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.blue: textView.setTextColor(Color.parseColor("#2239A2")); break; case R.id.green: textView.setTextColor(Color.parseColor("#1BA233")); break; case R.id.red: textView.setTextColor(Color.parseColor("#A21C31")); break; } return super.onContextItemSelected(item); }}
注意:长按绑定的控件+可以为任意一个view设置上下文菜单
1.实现流程:
步骤1:在res下面创建一个menu文件夹,并新建一个xml文件作为PoupMenu的布局文件。
步骤2:把PopupMenu相关逻辑封装到showPopupMenu()方法中,包含PopupMenu的实例化、布局设置、显示、添加MenuItem的点击监听及响应等 步骤3:为控件设置事件监听直接调用showPopupMenu()方法
2.代码
(1)xml布局文件:activity_main2.xml(2)Java代码:Main2Activity.java
public class Main2Activity extends AppCompatActivity { private TextView view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); view = (TextView) findViewById(R.id.popup_tv); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPopupMenu(); } }); } //TODO 弹出菜单 public void showPopupMenu(){ //TODO 1:创建对象 //参数一 上下文 参数二 菜单显示在指定控件的下方 PopupMenu popupMenu= new PopupMenu(this,view); //TODO 2:记载布局 popupMenu.inflate(R.menu.options_menu); //TODO 3:事件监听 popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { int id=item.getItemId(); switch (id){ case R.id.blue: view.setTextColor(Color.parseColor("#2239A2")); break; case R.id.green: view.setTextColor(Color.parseColor("#1BA233")); break; case R.id.red: view.setTextColor(Color.parseColor("#A21C31")); break; } return false; } }); //TODO 4:显示 popupMenu.show(); }}
注意:弹出菜单,默认弹出的位置在控件view的下方
转载地址:http://zwktn.baihongyu.com/