java.lang.RuntimeException:二进制 XML 文件行:您必须提供 layout_width 属性

java.lang.RuntimeException: Binary XML file line: You must supply a layout_width attribute

我在做什么::

  1. 我正在使用 THIS-LIBRARY
  2. 我有一个主 activity,它有一个存放碎片的抽屉(我 有 5 个碎片)
  3. 其中一个片段我实现了上面的库 对于滑动层(ps:使用这个库因为我没有使用 夏洛克库)

发生了什么:

  1. 在加载具有此库的片段时,我得到如图所示的日志

  2. 如何解决这个问题,图书馆明确指出我可以与 片段,因为它被视为任何其他视图(在评论中阅读 节)


fragment_whats_hot.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="45dp" />

    <Button
        android:id="@+id/buttonOpen"
        android:layout_centerInParent="true"
        android:onClick="buttonClicked"
        android:text="OPEN" />

    <com.slidinglayer.SlidingLayer
        xmlns:slidingLayer="http://schemas.android.com/apk/res/com.slidinglayersample"
        android:id="@+id/slidingLayer1"
        android:layout_width="@dimen/layer_width"
        android:layout_height="match_parent" >

        <!--
        slidingLayer:shadowDrawable="@drawable/sidebar_shadow"
        slidingLayer:shadowWidth="@dimen/shadow_width"
        slidingLayer:offsetWidth="@dimen/offset_width"
        slidingLayer:stickTo="auto|right|left|middle"
        slidingLayer:closeOnTapEnabled="true">
        -->

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#14ad8f" >

            <TextView
                android:id="@+id/swipeText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:drawablePadding="15dip"
                android:gravity="center"
                android:paddingBottom="80dp"
                android:textColor="#074035"
                android:textSize="17sp" />

            <Button
                android:id="@+id/buttonClose"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="60dp"
                android:onClick="buttonClicked"
                android:text="CLOSE" />
        </RelativeLayout>
    </com.slidinglayer.SlidingLayer>

</RelativeLayout>

WhatsHotFragment.java

public class WhatsHotFragment extends Fragment {

    public WhatsHotFragment(){}

    private SlidingLayer mSlidingLayer;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_whats_hot, container, false);

        // getPrefs();
        bindViews(rootView);
        initState();

        return rootView;
    }

    /**
     * View binding
     * @param rootView 
     */
    private void bindViews(View rootView) {
        mSlidingLayer = (SlidingLayer) rootView.findViewById(R.id.slidingLayer1);
    }

    /**
     * Initializes the origin state of the layer
     */
    private void initState() {
        // Sticks container to right or left
        LayoutParams rlp = (LayoutParams) mSlidingLayer.getLayoutParams();
        rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        mSlidingLayer.setLayoutParams(rlp);
    }

    public void buttonClicked(View v) {
        switch (v.getId()) {
        case R.id.buttonOpen:
            if (!mSlidingLayer.isOpened()) {
                mSlidingLayer.openLayer(true);
            }
            break;
        case R.id.buttonClose:
            if (mSlidingLayer.isOpened()) {
                mSlidingLayer.closeLayer(true);
            }
            break;
        }
    }

}

activity_main.xml

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Framelayout to display Fragments -->
    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- Listview to display slider menu -->
    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"        
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"/>
</android.support.v4.widget.DrawerLayout>

日志:

01-24 19:13:27.951: E/AndroidRuntime(5917): FATAL EXCEPTION: main
01-24 19:13:27.951: E/AndroidRuntime(5917): Process: info.androidhive.slidingmenu, PID: 5917
01-24 19:13:27.951: E/AndroidRuntime(5917): java.lang.RuntimeException: Binary XML file line #14: You must supply a layout_width attribute.
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:492)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:5960)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:6129)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.widget.RelativeLayout$LayoutParams.<init>(RelativeLayout.java:1225)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:1062)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.widget.RelativeLayout.generateLayoutParams(RelativeLayout.java:82)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:757)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at info.androidhive.slidingmenu.WhatsHotFragment.onCreateView(WhatsHotFragment.java:23)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.Fragment.performCreateView(Fragment.java:1700)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.BackStackRecord.run(BackStackRecord.java:684)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.FragmentManagerImpl.run(FragmentManager.java:443)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.os.Handler.handleCallback(Handler.java:733)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.os.Looper.loop(Looper.java:136)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at android.app.ActivityThread.main(ActivityThread.java:5086)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at java.lang.reflect.Method.invoke(Method.java:515)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
01-24 19:13:27.951: E/AndroidRuntime(5917):     at dalvik.system.NativeStart.main(Native Method)

错误消息相当简单:

java.lang.RuntimeException: Binary XML file line #14: You must supply a layout_width attribute.

这意味着您在布局文件中有一个 XML 元素需要 android:layout_width 属性,而您没有。

从堆栈跟踪来看,这似乎来自 fragment_whats_hot.xml。您会看到第 14 行位于:

<Button
    android:id="@+id/buttonOpen"
    android:layout_centerInParent="true"
    android:onClick="buttonClicked"
    android:text="OPEN" />

而且,如错误消息所示,您没有 android:layout_width 属性。您也没有 android:layout_height 属性。请将它们添加到此小部件以及需要它们的任何其他小部件或容器的布局中...例如您的其他 Button.