Tha*_* Le 3 android android-layout
我有一个屏幕,当设备是lanscape和portrait时显示不同的用户界面.它显示ListView设备是纵向的时间,它显示GridView何时设备是lanscape.它看起来像youtube应用程序或谷歌播放商店应用程序.
感谢您阅读和回答我的问题.
编辑:我想添加有关我的问题的更多详细信息:
我希望看到特定的例子或详细的解决方案.但任何答案都是适当的.谢谢
开发此功能有两件事.
首先,您必须制作两种不同的布局:
res
|- layout
|- mylayout.xml
|- layout-land.xml
|- mylayout.xml
Run Code Online (Sandbox Code Playgroud)
在layout/mylayout.xml文件中,包含ListView您需要的位置layout-land/mylayout.xml,包括您的GridView.
当您通话时,Android会自动选择正确的布局,具体取决于当前的屏幕方向setContentView.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
mListView = (ListView) findViewById(R.id.mylistview);
mGridView = (GridView) findViewById(R.id.mygridview);
// !!!!!!!
// mListView will be null in landscape
// mGridView will be null in portrait
// !!!!!!!
}
setContentView(R.layout.mylayout);
Run Code Online (Sandbox Code Playgroud)
现在,在代码中,您需要检查if/else语句的方向.
要检测您的方向,请遵循以下状态:
在中创建一个文件 res/values/bool.xml
<resources>
<bool name="isLandscape">false</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)在中创建一个文件 res/values-land/bool.xml
<resources>
<bool name="isLandscape">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)现在,在您的活动中,您可以在每次需要时轻松测试,如果您处于横向或纵向模式并应用相应的操作
boolean landscape = getResources().getBoolean(R.bool.isLandscape);
if (landscape) {
// do something with your GridView
} else {
// do something with your ListView
}
Run Code Online (Sandbox Code Playgroud)要回复您的修改:
碎片与活动非常相似.
如果要在方向更改期间保存数据,请按照本主题中的官方文档进行操作,尤其是有关在配置更改期间保留对象的部分.
您不应该使用文档中android:configChanges解释的in Manifest :
自己处理配置更改会使使用备用资源变得更加困难,因为系统不会自动为您应用它们.当您必须避免因配置更改而重新启动时,此技术应被视为最后的手段,并且不建议用于大多数应用程序.
| 归档时间: |
|
| 查看次数: |
2074 次 |
| 最近记录: |