Android 在服务中使用WindowManager时自定义视图不会膨胀
我正在尝试在服务中使用WindowManager添加自定义KnockView。这是KnockView课程Android 在服务中使用WindowManager时自定义视图不会膨胀,android,service,android-custom-view,android-windowmanager,Android,Service,Android Custom View,Android Windowmanager,我正在尝试在服务中使用WindowManager添加自定义KnockView。这是KnockView课程 public class KnowView extends LinearLayout { public KnowView(Context context) { super(context); initView(); } public KnowView(Context context, AttributeSet attrs) {
public class KnowView extends LinearLayout {
public KnowView(Context context) {
super(context);
initView();
}
public KnowView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.KnowView);
try {
isFromChangeKnock = typedArray.getBoolean(R.styleable.KnowView_changeKnock, false);
} catch (Exception e) {
e.printStackTrace();
} finally {
typedArray.recycle();
}
initView();
}
public KnowView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
mainLayout = inflate(getContext(), R.layout.knock_code, this);
}
}
所以,基本上在KnowView类中,我们正在膨胀另一个布局(敲打代码),并将其添加到KnowView中。之后,我在另一个名为的布局中使用这个自定义Knockview<代码>主视图.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parent_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:orientation="vertical"
tools:context=".MainActivity">
<production.kado.lock.views.KnowView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:paddingBottom="20dp"
app:changeKnock="true" />
</RelativeLayout>
但是,当我运行此服务时,会出现这些异常
07-12 09:16:34.087 12020-12020/production.kado.lock E/AndroidRuntime: FATAL EXCEPTION: main
Process: production.kado.lock, PID: 12020
java.lang.RuntimeException: Unable to create service production.kado.lock.services.LockService: android.view.InflateException: Binary XML file line #47: Binary XML file line #47: Error inflating class <unknown>
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3252)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1594)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Caused by: android.view.InflateException: Binary XML file line #47: Binary XML file line #47: Error inflating class <unknown>
Caused by: android.view.InflateException: Binary XML file line #47: Error inflating class <unknown>
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
at android.view.LayoutInflater.createView(LayoutInflater.java:645)
at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:717)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:785)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
at android.view.View.inflate(View.java:21008)
at production.kado.lock.views.KnowView.findAllViews(KnowView.java:115)
at production.kado.lock.views.KnowView.initView(KnowView.java:99)
at production.kado.lock.views.KnowView.<init>(KnowView.java:46)
at production.kado.lock.services.LockService.addLockView(LockService.java:87)
at production.kado.lock.services.LockService.onCreate(LockService.java:69)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3242)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1594)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 35: TypedValue{t=0x2/d=0x7f02012d a=-1}
07-12 09:16:34.087 12020-12020/production.kado.lock E/AndroidRuntime:致命异常:main
进程:production.kado.lock,PID:12020
java.lang.RuntimeException:无法创建服务production.kado.lock.services.LockService:android.view.InflateException:二进制XML文件行#47:二进制XML文件行#47:错误膨胀类
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:3252)
位于android.app.ActivityThread.-wrap5(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1594)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6247)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
原因:android.view.InflateException:二进制XML文件行#47:二进制XML文件行#47:膨胀类时出错
原因:android.view.InflateException:二进制XML文件行#47:膨胀类时出错
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.newInstance0(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:430)
位于android.view.LayoutInflater.createView(LayoutInflater.java:645)
位于com.android.internal.policy.PhoneLayoutFlater.onCreateView(phoneLayoutFlater.java:58)
位于android.view.LayoutInflater.onCreateView(LayoutInflater.java:717)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:785)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
在android.view.LayoutInflater.inflate(LayoutInflater.java:518)
在android.view.LayoutInflater.充气(LayoutInflater.java:426)
在android.view.LayoutInflater.inflate(LayoutInflater.java:377)
在android.view.view.inflate(view.java:21008)
位于production.kado.lock.views.KnowView.findAllViews(KnowView.java:115)
位于production.kado.lock.views.KnowView.initView(KnowView.java:99)
位于production.kado.lock.views.KnowView.(KnowView.java:46)
位于production.kado.lock.services.LockService.addLockView(LockService.java:87)
位于production.kado.lock.services.LockService.onCreate(LockService.java:69)
位于android.app.ActivityThread.handleCreateService(ActivityThread.java:3242)
位于android.app.ActivityThread.-wrap5(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1594)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6247)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
原因:java.lang.UnsupportedOperationException:未能解析索引35处的属性:TypedValue{t=0x2/d=0x7f02012d a=-1}
我在活动中也使用了KnockView,但在活动中,它工作得很好。唯一的问题是在与WindowManager一起使用时。我发现了我使用它时的问题
android:background="?selectableItemBackground"
属性在我的布局按钮中删除此属性后,它工作正常什么是
KnowView#findAllViews
?实际上,查找所有视图是一种方法,在该方法中我查找所有视图,此行位于findAllViews中<代码>主布局=充气(getContext(),R.layout.knock_代码,this)不,它在private void initView()
布局/knock_code.xml的第47行是什么?“但是如果我想在布局中使用这个属性怎么办?”
你可以使用android:background
属性,你在获取主题属性时遇到问题:?selectableItemBackground
android:background="?selectableItemBackground"