我工作的一个项目,我转换GUI到样式表。 我使用的是布局,然后横向/纵向设置样式表。 我用充气膨胀的布局,正如我动态添加和删除的内容,和视图本身是动态通过我的代码插入到应用程序中创建和销毁。
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:高度在基地布局一切完美运行。 这是不是真的可以接受的,因为我需要不同的值,布局VS肖像,以及为不同构建手机。
下一个选项是设置充气的rootView为null,这也得到了布局PARAMS权(有点...),但是这会导致空指针,当我尝试和返回视图的访问内部元件。
在我看来,像充气只是忽略了充气视图的风格元素,并从这个问题:
为什么LayoutInflater不理我指定的layout_width和layout_height布局参数?
我知道原因,但这又没有做我任何良好在这种情况下,我已经尝试建议的方法(见上文),并使用样式表时,我仍然得到这个错误。
我还没有尝试过的唯一选项是硬编码值到布局,然后编程检测屏幕的方向,并相应地改变布局参数,可以但这又需要为各种要做的电话建立,似乎打败样式表的全部目的。
有人有想法么?