Android:inflate()忽略利用样式表中定义的根布局宽度/高度。 BInary XML错误
我正在开发一个项目,并将GUI转换为样式表。我使用布局,然后使用风景/肖像组的样式表。我使用充气器充气布局,因为我动态地添加和删除内容,而视图本身是由我的代码插入的应用程序动态创建和销毁的。Android:inflate()忽略利用样式表中定义的根布局宽度/高度。 BInary XML错误
myView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.bearing_layout, parentView, false);
错误:了java.lang.RuntimeException:二进制XML文件中,第2行:必须提供layout_width属性。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/bearing_overall_layout">
<LinearLayout
style = "@style/bearing_header_layout">
<TextView android:id="@+id/header"
style = "@style/bearing_header"
android:background="@drawable/transparentbackground"
android:text="@string/bearing_title" />
</LinearLayout>
<RelativeLayout style="@style/BearingSelectListContainer"
android:id="@+id/top_view">
<LinearLayout
style="@style/BearingSelectList_linear_layout">
<TextView style="@style/BearingSelectListTitle"
android:id="@+id/title"
android:text="@string/bearing_title" />
<ScrollView android:id="@+id/listScroller"
style="@style/bearing_list_scroller">
<LinearLayout
style="@style/bearing_scroll_list_linear_layout" >
<LinearLayout android:id="@+id/pointList"
style="@style/bearing_point_list">
</LinearLayout>
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<Button style="@style/BearingSelectListButton" android:id="@+id/view" android:text="@string/view_button" />
<Button style="@style/BearingSelectListButton" android:id="@+id/my_loc" android:text="@string/my_loc_button" />
<Button style="@style/BearingSelectListButton" android:id="@+id/center" android:text="@string/center_button" />
<Button style="@style/BearingSelectListButton" android:id="@+id/exit" android:text="@string/exit_button" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
而且样式表:
<resources> <style name="bearing_overall_layout">
<item name="android:orientation">vertical</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">300dp</item>
</style>
<style name = "bearing_header_layout">
<item name ="android:orientation">horizontal</item>
<item name ="android:layout_width">fill_parent</item>
<item name ="android:layout_height">wrap_content</item>
<item name ="android:layout_alignParentTop">true</item>
<item name ="android:gravity">center</item>
</style>
<style name="bearing_header">
<item name = "android:padding">10dp</item>
<item name = "android:textSize">18sp</item>
<item name = "android:textStyle">bold</item>
<item name = "android:layout_width">wrap_content</item>
<item name = "android:layout_height">wrap_content</item>
<item name = "android:layout_alignParentTop">true</item>
<item name = "android:gravity">center</item>
</style>
<style name="GotoMgrsInput">
<item name="android:textSize">18dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">300dp</item>
<item name="android:background">#ff000000</item>
</style>
<style name="BearingSelectMgrsInput">
<item name="android:textSize">16sp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_weight">1</item>
<item name="android:typeface">monospace</item>
</style>
<style name="bearing_list_scroller">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
<item name="android:gravity">center</item>
</style>
<style name = "bearing_scroll_list_linear_layout">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:orientation">vertical</item>
<item name="android:layout_marginBottom">10dp</item>
<item name="android:gravity">center</item>
</style>
<style name = "bearing_point_list">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:layout_marginRight">1dip</item>
<item name="android:orientation">vertical</item>
<item name="android:gravity">center</item>
</style>
<style name="bearing_BearingSelectListContainer">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:background">#a000</item>
<item name="android:layout_alignParentLeft">true</item>
<item name="android:id">@+id/top_view</item>
<item name="android:gravity">center</item>
<item name="android:layout_alignParentLeft">false</item>
</style>
<style name="BearingSelectList_linear_layout">
<item name="android:orientation">vertical</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:layout_width">fill_parent</item>
</style>
<style name="BearingSelectListTitle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">24sp</item>
</style>
<style name="bearing_BearingSelectListButton">
<item name="android:layout_width">80dp</item>
<item name="android:layout_height">wrap_content</item>
</style>
<style name="bearing_text_label">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center</item>
<item name="android:shadowColor">#ff000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
<item name="android:textStyle">bold</item>
<item name="android:clickable">false</item>
<item name="android:longClickable">false</item>
</style>
<style name="bearing_item_inner_layout">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:gravity">center</item>
</style>
<style name="bearing_specific_view_layout">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:orientation">horizontal</item>
<item name="android:layout_alignParentLeft">true</item>
</style>
现在,如果我硬定义了android:宽度和android:高度在基地布局一切完美运行。这并不是真的可以接受,因为我需要不同的布局和肖像值,以及不同的手机版本。
下一个选项是将inflate的rootView设置为null,这会得到布局参数的权利(排序......),但是当我尝试访问返回的视图的内部元素时,这会导致空指针。
在我看来,像充气只是忽略了充气视图的风格元素,并从这个问题:
Why does LayoutInflater ignore the layout_width and layout_height layout parameters I've specified?
我知道原因,但这又没有做我任何好处这种情况下,因为我尝试了建议的方法(请参阅上文),并且在使用样式表时仍然遇到此错误。
我没有尝试过的唯一选择是将值硬编码到布局中,然后通过编程方式检测屏幕的方向并相应地更改布局参数,但这又需要针对各种手机完成建立并似乎击败了样式表的全部目的。
任何人有任何想法?
回答:
好吧,
所以我没有得到任何回应,这是我的解决方法:
更改此:
myView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.bearing_layout, parentView, false);
要这样:
myView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.bearing_layout, null, false);
这将在第一时间正确加载您的资源。注意:虽然所有后续的视图都可以正常工作,但这不会检测到针对方向更改的最低级别视图的布局更改。为了解决这个问题,我们添加了一个辅助函数:
genLayoutParams(yourView); private void genLayoutParams(View reuse) { // apply whatever layout parameters you see fit, these are just examples.
if (activity.getResources().getConfiguration().orientation == activity.getResources().getConfiguration().ORIENTATION_LANDSCAPE) {
reuse.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.FILL_PARENT));
}
else {
if (android.os.Build.VERSION.SDK_INT >= 13) {
reuse.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
250));
}
else{
reuse.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
300));
}
}
}
希望能节省一些沮丧。
回答:
当我搜索为什么我的TextView没有正确地膨胀xml参数时,我遇到了这个问题。与作者的解决方案不同,我必须使用我将TextView添加到的父LinearLayout的名称。
http://www.youtube.com/watch?v=1Y0LlmTCOkM
:解决问题TextView myTextView = (TextView) myInflater.inflate(R.layout.my_textview_xml, myLinearLayout, false);
此视频是有帮助
以上是 Android:inflate()忽略利用样式表中定义的根布局宽度/高度。 BInary XML错误 的全部内容, 来源链接: utcz.com/qa/259101.html