我想在xml或关键字中找到解决问题的解决方案:
我有多个屏幕。每个屏幕在layout
文件夹中都有自己的xml。例如,代码的一部分:
<RelativeLayout
android:id="@+id/headerLayout"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:background="@drawable/header" >
<Button
android:id="@+id/btBack"
android:layout_width="55dp"
android:layout_height="33dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dip"
android:layout_marginTop="10dip"
android:background="@drawable/bt_back"
/>
</RelativeLayout>
现在,我希望在轮换时更改"@drawable/header"
值运行时,可以配置和Android更改而不是Java代码中的我。用同样的事做完了
"@drawable/bt_back"
,这是bt_back.xml
文件夹中的drawable
文件,并且有一个选择器。他的内容在这里:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- selected state -->
<item android:drawable="@drawable/bt_back_pressed" android:state_pressed="true" android:state_selected="false"/>
<item android:drawable="@drawable/bt_back_pressed" android:state_pressed="false" android:state_selected="true"/>
<item android:drawable="@drawable/bt_back_pressed" android:state_pressed="true" android:state_selected="true"/>
<!-- unselected state (default) -->
<item android:drawable="@drawable/bt_back_normal"/>
</selector>
现在在文件夹中我想要drawable-hdpi,drawable-ldpi,我只需要放置那两个文件,并且android系统会根据用户设备dpi自动处理按下和正常状态的图像更改。
我希望从纵向和横向旋转标题。例如,它应该将header_port.png替换为header-land.png。
怎么可能?有什么想法吗?
我没有为横向绘制不同的.xml布局,也没有在java代码中挖掘。 也许在不同的文件夹中标题的资源,描述here?港口和土地?
答案 0 :(得分:5)
您可以创建drawable-land-hdpi目录。将你的横向版本放在合格的文件夹中,android应该自动加载它们。
答案 1 :(得分:2)
要详细说明@ toadzky的答案,您可以为this Android Developer页面上找到的任何限定符创建不同的drawable目录,并在每个页面中放置相同名称的图像,android会自动知道哪一个使用。布局(或布局 - 土地等)文件夹中的布局,值xml文件(例如,字符串资源 - 对本地化或主题有用),值文件夹或您通常的任何其他内容也是如此在res文件夹中找到。
同样重要的是要注意其优先级的工作方式(关于它为资源选择的目录),如果我没记错的话,“在排除所有不兼容的目录后首先匹配”。
所以,如果你只有drawable-hdpi和drawable,并且你有一个mdpi设备,它将消除所有用hdpi限定的目录,并从剩余的目录中选择(所以你最终得到了drawable的版本)夹)。有关链接页面的详细说明,请参阅“Android如何找到最佳匹配资源”。