如何使用定义了Style的AttributeSet

时间:2015-09-23 17:30:36

标签: android view

我不确定如何以编程方式创建此视图,我需要一个分隔符作为屏幕宽度的样式。以下没有绘制任何内容,我不知道如何在这里使用AttributeSet。请帮忙。

谢谢

    //in style.xml
<style name="Divider">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">2dp</item>
    <item name="android:background">?android:attr/listDivider</item>
</style>

 //in code
 View view = new View(activity, AttributeSetHere, R.style.Divider);
LinearLayout containerLL = (LinearLayout) activity.findViewById(mContainerViewId);
containerLL.addView(view);

1 个答案:

答案 0 :(得分:0)

这是一个非常常见的问题。你真的不能应用这样的风格。虽然,我理解这种API的可取性。 These three links会提供一些解释。

但是你想要实现的目标是视图背景。

<View
    android:id="@+id/divider"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="?android:attr/listDivider" />



编辑添加示例:
在文件 res/values/styles.xml

中定义样式
<style name="example_divider">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">2dp</item>
    <item name="android:layerType">software</item>
    <item name="android:background">?android:attr/listDivider</item>
</style>

然后将这一行添加到父布局文件

<View style="@style/example_divider" />

这会将视图添加到父布局文件中。


在代码中执行此操作
创建可在运行时膨胀的布局文件。让我们将其命名为 res/layout/divider_layout.xml

<View xmlns:android="http://schemas.android.com/apk/res/android"
      style="@style/example_divider" />

然后在java land中,您可以扩充布局文件 res/layout/divider_layout.xml 并将其添加到任何父布局。

View view = LayoutInflater.from(getContext()).inflate(R.layout.divider_layout, null, false);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 3);
LinearLayout containerLL = (LinearLayout) activity.findViewById(mContainerViewId);
containerLL.addView(view);