Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在服务中使用WindowManager时自定义视图不会膨胀_Android_Service_Android Custom View_Android Windowmanager - Fatal编程技术网

Android 在服务中使用WindowManager时自定义视图不会膨胀

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) {

我正在尝试在服务中使用WindowManager添加自定义KnockView。这是KnockView课程

    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"