在样式声明中指定时,不应用ListView分隔符

时间:2011-12-26 14:37:54

标签: android

这更“为什么?”比“怎么样?”问题,因为我知道这个问题的一个简单的解决方法。但我想知道我将要描述的行为背后的逻辑是什么。

我有一个样式声明和一些ListViews。我想改变分频器的外观。我使用了以下声明:

<style name="Theme.MyApp.Dark" parent="@style/Theme.Sherlock">
    <item name="android:dividerHeight">4px</item>
    <item name="android:divider">#123456</item>
</style>

令我高兴的是,只应用了分隔线的高度。我已经尝试用alpha值(#12345678)和渐变drawable指定颜色,没有任何效果。 ListViews声明如下:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

所以,你可以看到没有任何东西可以覆盖样式声明。我只能在ListView声明中直接指定它时更改分隔符:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"  
    android:divider="#123456"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

使用我新获得的specifying colors depending on theme selected技能,我可以非常轻松地解决这个问题 - 我只需要为每个列表声明android:divider自定义颜色属性。

但为什么我不能改变风格中的android:divider,就像android:dividerHeight一样?这有什么理由吗?我找不到解释,错误报告或类似的东西让我理解这种行为。

编辑:主题全局应用于清单文件:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="org.my.app" android:theme="@style/Theme.MyApp.Dark">

2 个答案:

答案 0 :(得分:5)

它可以从主题设置,但有一个小技巧:

<style name="MyTheme" parent="AppTheme">
        <item name="android:listViewStyle">@style/MyListViewStyle</item>
</style>

<style name="MyListViewStyle" parent="@android:style/Widget.ListView">
        <item name="android:divider">#F00</item>
        <item name="android:dividerHeight">1px</item>
</style>

Rgrds;)

答案 1 :(得分:1)

你必须在Lisview中提到这样的风格

   <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list"  
        style = "@style/Theme.MyApp.Dark"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"/> 

否则这不会起作用..