Android应用报‘Binary XML file line #0:需提供layout_width属性’求解决附GPS代码
解决Android布局错误:You must supply a layout_width attribute
嘿,这个错误我太熟悉了——咱们一步步来搞定它!
错误原因本质
这个报错说明你的XML布局文件里有一个控件没有声明android:layout_width属性(大概率连android:layout_height也没加)。Android的布局系统要求所有可见控件必须明确指定这两个属性,否则无法计算控件的大小和位置。
具体排查步骤
检查核心布局文件
重点看你的GPS应用用到的activity_maps.xml(毕竟你的MapsActivity里调用了setContentView加载布局),还有可能用到的自定义弹窗、include进来的子布局、Marker的信息窗口布局等。逐行排查有没有控件缺失layout_width或layout_height。修复示例
比如如果你的布局里有个未设置属性的TextView,要改成这样:<TextView android:id="@+id/location_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="当前位置:" />对于MapView控件,同样要确保这两个属性存在:
<com.google.android.gms.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" />特殊情况:动态创建View
如果你在MapsActivity里有动态创建View的代码(比如自定义Marker的InfoWindow),也要确保代码里给View设置了LayoutParams:View customInfoWindow = getLayoutInflater().inflate(R.layout.custom_info_window, null); // 必须设置LayoutParams,否则也会触发类似错误 customInfoWindow.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ));排查隐藏的布局引用
有时候错误日志显示line #0,可能是因为你用了<include>标签引用了其他布局,或者用了<merge>标签,这时候要去检查被引用的子布局文件,看里面的控件是否缺失属性。
额外提示
如果还是找不到问题,建议查看完整的错误栈追踪——它会告诉你具体是哪个布局文件出了问题,比只看“line #0”要有用得多。
内容的提问来源于stack exchange,提问作者user9537534
相关产品推荐
相关产品推荐

