所以,我的程序运行正常。我只留下了三个警告(每个弹出窗口都有一个警告)并且它让我很烦恼,我一直在寻找能够满足我需求的解决方案,但我似乎无法找到一个。
这是我的代码(其他两个popupwindows相似)
else if(id == R.id.action_resetstats){
LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.resetpop, null);
final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
Button yesDismiss = (Button)popupView.findViewById(R.id.yesDismiss);
yesDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v){
SharedPreferences prefs = getSharedPreferences(savedData, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.clear();
editor.commit();
counterW = 0;
counterL = 0;
counterT = 0;
counterTot = 0;
timerTime = 3;
popupWindow.dismiss();
}
});
popupWindow.showAsDropDown(yeDismiss, 50, 50);
Button noDismiss = (Button)popupView.findViewById(R.id.noDismiss);
noDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v){
popupWindow.dismiss();
}
});
popupWindow.showAsDropDown(naDismiss, 50, 50);
XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:background="@android:color/black"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:layout_width="230dp"
android:layout_height="300dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="2dp"
android:background="@android:color/darker_gray"
android:orientation="vertical" >
<Button
android:id="@+id/noDismiss"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="NO!" />
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" Reset stats?"
android:textSize="22sp" />
</RelativeLayout>
<Button
android:id="@+id/yesDismiss"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="Yes" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/relativeLayout1"
android:layout_centerHorizontal="true"
android:layout_marginTop="34dp"
android:text="Are you sure you want " />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:text="to reset your statistics?" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true"
android:layout_marginTop="39dp"
android:text="!CANNOT BE UNDONE!" />
</RelativeLayout>
</RelativeLayout>
问题在于解决问题:
View popupView = layoutInflater.inflate(R.layout.resetpop, null);
并且警告说:
Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)
任何想法如何解决这个最好的方法?提前谢谢!
答案 0 :(得分:6)
你可以使用:
context = popupView.getContext();
inflater.inflate(R.layout.resetpop, new LinearLayout(context), false);
那应该解决警告。
答案 1 :(得分:1)
当您在下面编写代码博客时,您的意思是使用父级扩展此布局,将其附加到父级,但由于传递null,inflater将无法附加新父级
View popupView = layoutInflater.inflate(R.layout.resetpop, null);
350
351 public View More ...inflate(int resource, ViewGroup root) {
352 return inflate(resource, root, root != null);
353 }
但是,它会在给定的父母身上膨胀,但不会将其附加到新的父母身上。
View popupView = layoutInflater.inflate(R.layout.resetpop, new LinearLayout(context), false);
答案 2 :(得分:0)
PopupWindow性能问题和无法关闭
如果由于PopupWindow
上的某些性能问题而有人偶然发现这里。
这是您启动PopupWindow
的时间,但只是冻结整个屏幕,除非重新启动应用程序,否则无法继续。发生在较旧的设备上,我的碰巧是三星GT-N7100(API 19)。
好吧,我尝试使用LayoutInflater
时解决警告。但是,并没有解决滞后的问题。
步骤1-将视图设置为使用软件加速渲染
根据此论坛帖子,我所要做的就是将视图设置为对该视图使用软件加速。然后,一切都好似雨。
https://androidforums.com/threads/android-popupwindow-performance-issues.882794/
val popupView = inflater.inflate(R.layout.popup_tooltip, null)
popupView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
第2步-将PopupWindow Focusable属性设置为关闭
此后,我仍然遇到解雇PopupWindow
的问题。如果仅将focusable设置为true,则性能问题将仍然存在。
我必须手动设置属性以允许在检测到点击时将其消除。
https://stackoverflow.com/a/45408724/2867351
val popupWindow = PopupWindow(popupView, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
popupWindow.isFocusable = true
popupWindow.isOutsideTouchable = true
popupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
就是这样。干杯伴侣