[英]How to change layout when rotate?
我在layout-normal
, layout-large
和layout-land
有一個xml
。 我想做的是在特定orientation
使用提供的xml
。
我已經在這里搜索了,這是我已經嘗試過的方法。
1)我使用了不同的layout
名稱,但使用了相同的ids
,並覆蓋onConfigurationChanged
並在那里設置了layout
。 這是我的代碼
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.activity_login2);
}
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.activity_login );
}
}
它確實發生了變化,但是當屏幕旋轉時, EditText
的輸入數據消失了。 我嘗試使用onSaveInstanceState
保存instance
但仍然相同。 看起來它破壞了活動並創建了一個新活動,所有在onCreate
初始化的小部件都消失了。
2)然后我找到layout-land
,然后將具有相同布局名稱的風景布局放在那里,就像layout-normal
和layout-large
示例是
res/layout-land -> activity_login.xml
res/layout-normal-> activity_login.xml
res/layout-large-> activity_login.xml
並刪除代碼上的onConfigurationChanged
,但仍然無法正常工作。
在我的LoginActivity
AndroidManifest
中,
<activity
android:name=".LoginActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/DefaultTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
屏幕旋轉時是否有改變布局的方法? 先感謝您。
“屏幕尺寸”限定符的優先級高於“方向”限定符。 https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources
Android支持多個配置限定符,您可以通過用破折號分隔每個限定符來將多個限定符添加到一個目錄名稱。 表2按優先級列出了有效的配置限定符
假設您有以下文件:
res/
layout-normal/
layout.xml
layout-land/
layout.xml
如果您擁有普通的屏幕尺寸設備,則使用縱向還是橫向都沒關系。 總是選擇layout-normal
而不是layout-land
。
您可以解決這兩種不同的方式。
首先,您可以將“默認”布局放在純layout
目錄中(而不是layout-normal
)。 所以你的文件將是
res/
layout/
layout.xml
layout-land/
layout.xml
其次,您可以組合使用限定詞,以使您明顯區分肖像和風景。 所以你的文件將是
res/
layout-normal/
layout.xml
layout-normal-land/
layout.xml
我認為您可能會錯過layout-land
文件夾的要點。 應該是這樣的情況:當設備旋轉到橫向時,您在some_activity.xml
指定的任何布局(例如some_activity.xml
)都將自動使用。 您可以使用potrait版本已經使用的確切名稱來命名布局文件。 布局文件本身也可以使用相同的ID來命名出現的各種小部件。
關於在旋轉設備時丟失某些UI狀態,您可能必須重寫onSaveInstanceState(Bundle savedInstanceState)
並在發生旋轉時從UI保存一些狀態。 不過,這實際上與顯示布局文件沒有任何關系。
首先,您不需要創建另一個.xml
例如activity_login2
,則可以使用相同的activity_login.xml
。
Android具有默認文件夾/ res / layout ,其中包括所有布局。 因此,每當旋轉設備時,它將使用相同的activity_login.xml文件。
您可以添加一個新文件夾/ res / layout-land,將activity_login.xml復制到其中並進行必要的調整。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
{
setContentView(R.layout.activity_login2); // it will use .xml from /res/layout
}
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
setContentView(R.layout.activity_login); // it will use xml from /res/layout-land
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.