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

回到顶部