我的应用中有一个GridView,我想根据当前的屏幕宽度手动设置列数。
我尝试做的是设置一个应该应用于GridView的样式,并在values-w600dp
文件夹中提供另一种样式,android:numColumns
属性设置为不同的值。这没用。
我知道有不同的方法可以实现我最初提出的建议(例如通过声明整数资源并以通用样式使用它),其中将列宽设置为一个值并允许GridView自动确定列数可能是最理智的解决方案。
但是,我仍然想知道为什么我的初步尝试不起作用。在文档中,我发现带有样式的XML文件可以命名为任何内容,只要它放在res/values
目录中即可。类似的东西也说是字符串和字符串是可本地化的,所以我不知道文档是否说它不起作用或者它是否意味着它可以在不同的res/values-...
目录中提供,如字符串。
所以问题是:可以为不同的配置提供样式吗?
编辑:发布的文件
RES /值/ styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyGridView">
<item name="android:numColumns">1</item>
</style>
</resources>
RES /值-w400dp / styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyGridView">
<item name="android:numColumns">2</item>
</style>
</resources>
RES /布局/ grid_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="?android:attr/actionBarSize"
>
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:verticalSpacing="12dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:clipToPadding="false"
android:listSelector="@drawable/list_selector"
android:drawSelectorOnTop="true"
style="@style/MyGridView"
/>
</RelativeLayout>
当我粘贴代码时,我发现了问题。我在布局XML中犯了一个愚蠢的错误:style="MyGridView"
。
答案 0 :(得分:2)
是的,有一些警告。
Android默认情况下会根据加载时的当前条件加载相应的资源;有关详情,请参阅the Android Docs on Resources。基本上,资源文件夹的名称决定了它们应该加载的时间,因此您可以拥有文件夹
/values
/values-sw50dp (smallest width 50dp, for screens bigger than 50dp)
/values-car (if you were in a car dock)
等。您可以使用许多选项,例如screensize
表示一般感觉,或available width
根据宽度进行操作。
但是。
这仅适用于您未在清单中为该活动设置任何configChanges
的情况:如果您确实有一些设置,Android会假定您自己处理所有内容并且不会自动加载正确的资源。此外,一般遵循良好的代码意义,不要过分,为15种不同的屏幕宽度制作单独的布局文件。