Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
Java Android自定义组件:未找到布局\u宽度属性_Java_Android_Components_Android Linearlayout - Fatal编程技术网

Java Android自定义组件:未找到布局\u宽度属性

Java Android自定义组件:未找到布局\u宽度属性,java,android,components,android-linearlayout,Java,Android,Components,Android Linearlayout,我有一个自定义组件 在通过组件的构造函数后,我总是收到一个“必须提供布局宽度属性”错误。也许你能帮我 组件的类: public class UndoBar extends LinearLayout { private TextView messageTextView; private Button undoButton; public UndoBar(Context context) { this(context, null); }

我有一个自定义组件

在通过组件的构造函数后,我总是收到一个“必须提供布局宽度属性”错误。也许你能帮我

组件的类:

public class UndoBar extends LinearLayout {

    private TextView messageTextView;
    private Button undoButton;

    public UndoBar(Context context) {
        this(context, null);
    }

    public UndoBar(Context context, AttributeSet attrs) {
        super(context, attrs);

        final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.undobar, this);

        messageTextView = (TextView) findViewById(R.id.undobar_message);
        undoButton = (Button) findViewById(R.id.undobar_button);

        setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); // here I set the height/width!!
        setOrientation(HORIZONTAL);
        setVisibility(GONE);
        setPadding(4, 4, 4, 4); // todo muss dp sein
        setBackgroundColor(Color.BLUE);
        setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
    }

    public Button getUndoButton() {
        return undoButton;
    }

    public TextView getMessageTextView() {
        return messageTextView;
    }

    public void setOnClickListener(OnClickListener l) {
        undoButton.setOnClickListener(l);
    }

}
组件的XML文件:

<merge xmlns:android="http://schemas.android.com/apk/res/android" >

    <TextView
        android:id="@+id/undobar_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Deleted"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#fff" />

    <Button
        android:id="@+id/undobar_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:background="#808080"
        android:drawableLeft="@drawable/ic_revert"
        android:text="Undo"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#fff" />

</merge>

这是嵌入组件的地方(我也尝试在这里设置组件的宽度/高度,运气不好):


...
日志:

01-26 17:48:19.921: E/java.lang.RuntimeException(5832): Binary XML file line #50: You must supply a layout_width attribute.
01-26 17:48:19.921: E/java.lang.RuntimeException(5832): java.lang.RuntimeException: Binary XML file line #50: You must supply a layout_width attribute.
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5631)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:5773)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.widget.RelativeLayout$LayoutParams.<init>(RelativeLayout.java:1154)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:992)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:70)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:748)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.Activity.setContentView(Activity.java:1881)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at de.innosoft.android.activity.Einsaetze.onCreate(Einsaetze.java:61)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.Activity.performCreate(Activity.java:5104)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2354)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.ActivityThread.access$600(ActivityThread.java:150)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.os.Looper.loop(Looper.java:137)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at android.app.ActivityThread.main(ActivityThread.java:5191)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at java.lang.reflect.Method.invokeNative(Native Method)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at java.lang.reflect.Method.invoke(Method.java:511)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
01-26 17:48:19.921: E/java.lang.RuntimeException(5832):     at dalvik.system.NativeStart.main(Native Method)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):二进制XML文件行#50:必须提供布局宽度属性。
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):java.lang.RuntimeException:二进制XML文件行#50:必须提供布局宽度属性。
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5631)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.view.ViewGroup$MarginLayoutParams(ViewGroup.java:5773)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.widget.RelativeLayout$LayoutParams。(RelativeLayout.java:1154)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:992)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:70)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.view.LayoutInflater.rInflate(LayoutInflater.java:748)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.view.LayoutInflater.inflate(LayoutInflater.java:489)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.Activity.setContentView(Activity.java:1881)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于de.innosoft.android.activity.Einsaetze.onCreate(Einsaetze.java:61)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.Activity.performCreate(Activity.java:5104)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2354)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.ActivityThread.access$600(ActivityThread.java:150)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):在android.os.Handler.dispatchMessage(Handler.java:99)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.os.Looper.loop(Looper.java:137)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于android.app.ActivityThread.main(ActivityThread.java:5191)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于java.lang.reflect.Method.invoke(Method.java:511)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
01-26 17:48:19.921:E/java.lang.RuntimeException(5832):位于dalvik.system.NativeStart.main(本机方法)

在为Xml中的自定义视图添加
布局宽度
布局高度
后重试:

<de.myapp.android.UndoBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/undobar" />

在为Xml中的自定义视图添加
布局宽度
布局高度
后重试:

<de.myapp.android.UndoBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/undobar" />


对于初学者来说是
对于初学者来说是
我很困惑。这个建议我试过一次,但直到现在才奏效。我甚至不知道为什么setLayoutParams不起作用。很抱歉浪费您的时间。@cdbeelala89:因为我的时间也面临着这个问题,如果我们不声明布局宽度或布局高度,那么运行时就会出现错误,我很困惑。这个建议我试过一次,但直到现在才奏效。我甚至不知道为什么setLayoutParams不起作用。很抱歉浪费了您的时间。@cdbeelala89:因为我的时间也面临着这个问题,如果我们不声明布局宽度或布局高度,那么运行时就会出现错误