【问题标题】:java.lang.RuntimeException: Binary XML file line: You must supply a layout_width attributejava.lang.RuntimeException:二进制 XML 文件行:您必须提供 layout_width 属性
【发布时间】:2015-01-24 13:58:52
【问题描述】:

我在做什么 ::

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

发生了什么:

  1. 在加载包含此库的片段时,我得到如下所示的日志

  2. 如何解决这个问题,库明确指出我可以与 片段,因为它被视为任何其他视图(在 cmets 中读取 部分)


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$1.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)

【问题讨论】:

  • 您没有为buttonOpen 按钮设置尺寸。
  • @DerGolem .... 是的! ......那是错误......我没有注意到......我想我的大脑没有滴答作响......需要刷新:)

标签: android android-fragments


【解决方案1】:

错误信息相当简单:

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

【讨论】:

  • 我太笨了没有注意到.....感谢您的回答和清晰的解释!
最近更新 更多