Java PopupWindow如何以编程方式更改图标和背景?
具有PopupWindow的xml文件: 如何以编程方式替换此xml中的图标和背景?Java PopupWindow如何以编程方式更改图标和背景?,java,android,Java,Android,具有PopupWindow的xml文件: 如何以编程方式替换此xml中的图标和背景? 您可以使用 LinearLayout ll=(LinearLayout)findViewById(R.id.linear); ll.挫折背景(…) 您可以使用 LinearLayout ll=(LinearLayout)findViewById(R.id.linear); ll.挫折背景(…)首先初始化要更改的imageView。像这样: ImageView imageView = (ImageView) f
您可以使用
LinearLayout ll=(LinearLayout)findViewById(R.id.linear);
ll.挫折背景(…)代码>
您可以使用
LinearLayout ll=(LinearLayout)findViewById(R.id.linear);
ll.挫折背景(…)代码>首先初始化要更改的imageView。像这样:
ImageView imageView = (ImageView) findViewById(R.id.yourImageViewId);
然后
同样,您也可以对背景进行更改。首先初始化要更改的imageView。像这样:
ImageView imageView = (ImageView) findViewById(R.id.yourImageViewId);
然后
同样,您也可以对背景进行更改。您需要应用主题样式,如下所示:
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@color/colorPrimary</item>
<item name="android:background">@color/colorPrimary</item>
<item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>
@颜色/原色
@颜色/原色
@android:颜色/深灰色
以下代码适用于我:
public void showPopUpMenu(final Context context, View view) {
Context wrapper = new ContextThemeWrapper(context, R.style.PopupMenu);
PopupMenu popup = new PopupMenu(wrapper, view, Gravity.END);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_options, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_share:
shareWithFriends();
break;
default:
break;
}
return true;
}
});
try {
Field[] fields = popup.getClass().getDeclaredFields();
for (Field field : fields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(popup);
Class<?> classPopupHelper = Class.forName(menuPopupHelper
.getClass().getName());
Method setForceIcons = classPopupHelper.getMethod(
"setForceShowIcon", boolean.class);
setForceIcons.invoke(menuPopupHelper, true);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
popup.show();
}
public void showPopUpMenu(最终上下文,视图){
上下文包装器=新的上下文主题包装器(Context,R.style.PopupMenu);
PopupMenu popup=新的PopupMenu(包装器、视图、重力.END);
MenuInflater充气器=弹出窗口。getMenuInflater();
充气器。充气(R.menu.menu_选项,popup.getMenu());
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(MenuItem MenuItem){
开关(menuItem.getItemId()){
案例R.id.行动与共享:
与朋友分享();
打破
违约:
打破
}
返回true;
}
});
试一试{
Field[]fields=popup.getClass().getDeclaredFields();
用于(字段:字段){
if(“mPopup.equals(field.getName())){
字段。setAccessible(true);
Object menuPopupHelper=field.get(弹出窗口);
Class CLASSPOPUSCURLPER=Class.forName(menuPopupHelper
.getClass().getName());
方法setForceIcons=classPopucUpCelper.getMethod(
“setForceShowIcon”,boolean.class);
调用(menuPopupHelper,true);
打破
}
}
}捕获(例外e){
e、 printStackTrace();
}
popup.show();
}
您需要应用以下主题样式:
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@color/colorPrimary</item>
<item name="android:background">@color/colorPrimary</item>
<item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>
@颜色/原色
@颜色/原色
@android:颜色/深灰色
以下代码适用于我:
public void showPopUpMenu(final Context context, View view) {
Context wrapper = new ContextThemeWrapper(context, R.style.PopupMenu);
PopupMenu popup = new PopupMenu(wrapper, view, Gravity.END);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_options, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_share:
shareWithFriends();
break;
default:
break;
}
return true;
}
});
try {
Field[] fields = popup.getClass().getDeclaredFields();
for (Field field : fields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(popup);
Class<?> classPopupHelper = Class.forName(menuPopupHelper
.getClass().getName());
Method setForceIcons = classPopupHelper.getMethod(
"setForceShowIcon", boolean.class);
setForceIcons.invoke(menuPopupHelper, true);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
popup.show();
}
public void showPopUpMenu(最终上下文,视图){
上下文包装器=新的上下文主题包装器(Context,R.style.PopupMenu);
PopupMenu popup=新的PopupMenu(包装器、视图、重力.END);
MenuInflater充气器=弹出窗口。getMenuInflater();
充气器。充气(R.menu.menu_选项,popup.getMenu());
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(MenuItem MenuItem){
开关(menuItem.getItemId()){
案例R.id.行动与共享:
与朋友分享();
打破
违约:
打破
}
返回true;
}
});
试一试{
Field[]fields=popup.getClass().getDeclaredFields();
用于(字段:字段){
if(“mPopup.equals(field.getName())){
字段。setAccessible(true);
Object menuPopupHelper=field.get(弹出窗口);
Class CLASSPOPUSCURLPER=Class.forName(menuPopupHelper
.getClass().getName());
方法setForceIcons=classPopucUpCelper.getMethod(
“setForceShowIcon”,boolean.class);
调用(menuPopupHelper,true);
打破
}
}
}捕获(例外e){
e、 printStackTrace();
}
popup.show();
}
弹出菜单的XML布局通常在菜单文件夹中创建
您必须在调用popup.show()之前更改它
弹出菜单的XML布局通常在菜单文件夹中创建
您必须在调用popup.show()之前更改它
LinearLayout menuLayout=(LinearLayout)activity.getLayoutInflater().inflate(menuId,null);
int layoutCount=menuLayout.getChildCount();
对于(int i=0;i
您可以使用findViewById查找项目。LinearLayout menuLayout=(LinearLayout)活动。GetLayoutFlater()。充气(menuId,null);
int layoutCount=menuLayout.getChildCount();
对于(int i=0;i