java.lang.RuntimeException:二进制 XML 文件行:您必须提供 layout_width 属性
java.lang.RuntimeException: Binary XML file line: You must supply a layout_width attribute
我在做什么::
- 我正在使用 THIS-LIBRARY
- 我有一个主 activity,它有一个存放碎片的抽屉(我
有 5 个碎片)
- 其中一个片段我实现了上面的库
对于滑动层(ps:使用这个库因为我没有使用
夏洛克库)
发生了什么:
在加载具有此库的片段时,我得到如图所示的日志
如何解决这个问题,图书馆明确指出我可以与
片段,因为它被视为任何其他视图(在评论中阅读
节)
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
.
我在做什么::
- 我正在使用 THIS-LIBRARY
- 我有一个主 activity,它有一个存放碎片的抽屉(我 有 5 个碎片)
- 其中一个片段我实现了上面的库 对于滑动层(ps:使用这个库因为我没有使用 夏洛克库)
发生了什么:
在加载具有此库的片段时,我得到如图所示的日志
如何解决这个问题,图书馆明确指出我可以与 片段,因为它被视为任何其他视图(在评论中阅读 节)
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
.