常用菜单
一.系统菜单
java实现代码
//加载菜单文件(右上角)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
//实现菜单文件点击出现
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId();
//判断选中的颜色
switch (itemId) {
case R.id.red:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
tv.setTextColor(Color.parseColor("#339933"));//更改颜色
break;
case R.id.blue:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
tv.setTextColor(Color.BLUE);//更改颜色
break;
case R.id.green:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
tv.setTextColor(Color.GREEN);//更改颜色
break;
case R.id.black:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
tv.setTextColor(Color.BLACK);//更改颜色
break;
case R.id.yellal:
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
tv.setTextColor(Color.YELLOW);//更改颜色
break;
}
return super.onOptionsItemSelected(item);
}
xml 布局文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/red" android:title="红色" app:showAsAction="always"></item>
<item android:id="@+id/blue" android:title="蓝色" ></item>
<item android:id="@+id/green" android:title="绿色" ></item>
<item android:id="@+id/black" android:title="黑色" ></item>
<item android:id="@+id/yellal" android:title="黄色" ></item>
</menu>
二.上下文菜单
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
//实现上下文菜单长按出现
registerForContextMenu(tv);
}
//上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu, menu);
}
三.上下文点击
tv1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取对象,参数一是当前类对象,参数二是在谁下面显示
PopupMenu popupMenu = new PopupMenu(Main2Activity.this, tv1);
//加载布局
popupMenu.inflate(R.menu.menu);
//点击事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case R.id.red:
tv.setTextColor(Color.parseColor("#339933"));//更改颜色
break;
case R.id.blue:
tv.setTextColor(Color.BLUE);//更改颜色
break;
case R.id.green:
tv.setTextColor(Color.GREEN);//更改颜色
break;
case R.id.black:
tv.setTextColor(Color.BLACK);//更改颜色
break;
case R.id.yellal:
tv.setTextColor(Color.YELLOW);//更改颜色
break;
}
return false;
}
});
//显示
popupMenu.show();
}
});
四.PopupWindow
Activity的代码布局
public void btn(View view) {
final PopupWindow popupWindow = new PopupWindow(this);
View inflate = LayoutInflater.from(this).inflate(R.layout.btn, null);
TextView textview = inflate.findViewById(R.id.bt1);
textview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Main2Activity.this, "1", Toast.LENGTH_SHORT).show();
popupWindow.dismiss();
}
});
//加载布局文件
popupWindow.setContentView(inflate);
//设置宽高
popupWindow.setWidth(300);
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);//设置包裹
//设置点击外部可取消
popupWindow.setOutsideTouchable(true);
//设置显示位置。。。之下 XY轴调试距离
//popupWindow.showAsDropDown(tv,100,100);
View inflate1 = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
popupWindow.showAtLocation(inflate1,Gravity.CENTER,0,0);
}
一 .更改透明度
//透明度减半
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.alpha = 0.5f;
getWindow().setAttributes(attributes);
//消失监听器
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.alpha = 1f;
getWindow().setAttributes(attributes);
}
});
二 .加载动画
主体代码
popupWindow.setAnimationStyle(R.style.pop);
- 配置资源文件 anim 编写动画样式
<!-- 进入动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000">
<alpha android:fromAlpha="0.1" android:toAlpha="1"/>
<translate android:fromYDelta="-300" android:toYDelta="0"/>
</set>
<!-- 淡出动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000">
<alpha android:fromAlpha="1" android:toAlpha="0.1"/>
<translate android:fromYDelta="0" android:toYDelta="300"/>
</set>
- 在资源文件 values 下的 styles 中添加样式
<style name="pop" parent="android:Animation">
<!-- 进入样式 -->
<item name="android:windowEnterAnimation">@anim/pop_in</item>
<!-- 淡出样式 -->
<item name="android:windowExitAnimation">@anim/pop_out</item>
</style>