为纵向和横向指定不同的布局?
Posted
技术标签:
【中文标题】为纵向和横向指定不同的布局?【英文标题】:specify different layouts for portrait and landscape orientations? 【发布时间】:2012-03-22 10:15:45 【问题描述】:我为一个活动指定了两个单独的布局 xml 文件,一个用于 res/layout 文件夹中的 Portrait,另一个用于 res/layout-land 文件夹中的 Landscape。我的实际问题是,当我以纵向模式启动应用程序时,它会从布局中获取 ui,然后我立即旋转手机,它不会从 layout-land 文件夹中获取 xml,它会从布局文件夹中获取 ui,如果我以横向模式启动我的应用程序从 layout-land 文件夹获取 xml 并立即将我旋转到纵向模式 它从 layout-land ui 获取 xml 不会更改为纵向 ui。
哪位朋友能告诉我这是什么问题吗?请帮我解决这个问题。
提前致谢。
this is my landscape ui xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget57"
android:layout_
android:layout_
android:layout_gravity="center|center_vertical"
android:layout_marginTop="30dp"
android:orientation="vertical" >
<TableRow
android:id="@+id/tableRow1"
android:layout_
android:layout_
android:layout_marginTop="40dp" >
<TextView
android:id="@+id/txtName"
android:layout_
android:text="@string/UserName" />
<EditText
android:id="@+id/edName"
android:imeOptions="actionNext|actionDone"
android:paddingRight="10dp"
android:singleLine="true"
android: />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_
android:layout_ >
<TextView
android:id="@+id/txtPass"
android:layout_
android:text="@string/PassWord" />
<EditText
android:id="@+id/edPass"
android:imeOptions="actionGo"
android:paddingRight="10dp"
android:password="true"
android:singleLine="true"
android: />
</TableRow>
<LinearLayout
android:id="@+id/widget57"
android:layout_
android:layout_
android:layout_gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/btnLogin"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="@string/btn_GO"
android:textSize="19sp" >
</Button>
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:text="CoinOp Solutions"
android:textSize="30sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="Version 0.1" />
</LinearLayout>
</TableLayout>
this is my Portrait ui
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget57"
android:layout_
android:layout_
android:orientation="vertical" >
<TextView
android:id="@+id/txt_Required"
android:layout_
android:layout_
android:layout_marginTop="15dp"
android:text=""
android:textColor="#ffff0000" >
</TextView>
<TextView
android:id="@+id/txtName"
android:layout_
android:layout_
android:layout_marginTop="15dp"
android:text="@string/UserName" >
</TextView>
<EditText
android:id="@+id/edName"
android:layout_
android:layout_
android:imeOptions="actionNext|actionDone"
android:singleLine="true"
android:textSize="18sp" >
</EditText>
<TextView
android:id="@+id/txtPass"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:text="@string/PassWord" >
</TextView>
<EditText
android:id="@+id/edPass"
android:layout_
android:layout_
android:imeOptions="actionGo"
android:maxLines="1"
android:password="true"
android:singleLine="true"
android:textSize="18sp" >
</EditText>
<LinearLayout
android:id="@+id/widget57"
android:layout_
android:layout_
android:layout_gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/btnLogin"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="@string/btn_GO"
android:textSize="19sp" >
</Button>
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:text="CoinOp Solutions"
android:textSize="30sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="Version 0.1" />
</LinearLayout>
</LinearLayout>
我的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package=""
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:debuggable="true"
android:icon="@drawable/coinop"
android:label="@string/app_name"
android:theme="@style/CustomTheme" >
<activity
android:name=".LoginActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:windowSoftInputMode="stateVisible|adjustPan" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ShowDbList"
android:configChanges="orientation"
android:label="@string/app_name"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name=".Menu"
android:configChanges="orientation"
android:label="@string/app_name"
android:windowSoftInputMode="adjustPan" >
</activity>
【问题讨论】:
请出示 manifest.xml 文件。 【参考方案1】:您的清单中有android:configChanges="orientation"
。根据doc configChanges
包含您将自己手动处理的操作列表。
如果您删除android:configChanges="orientation"
,则旋转手机时布局将发生变化。否则你应该自己处理。
【讨论】:
【参考方案2】:不确定这是否有帮助,但你可以尝试(如果你还没有):
-
在使用布局的 Activity 中,再次覆盖 onConfigurationChanged 和 setContentView。
为使用布局的活动移除 android:configChanges="orientation"
【讨论】:
【参考方案3】:你应该尝试添加:
@Override
public void onConfigurationChanged(Configuration newConfig)
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
并通过 Activity 中的 setContentView(..) 手动设置布局。 希望这会有所帮助。 在以下位置查看更多信息: http://developer.android.com/guide/topics/resources/runtime-changes.html
【讨论】:
以上是关于为纵向和横向指定不同的布局?的主要内容,如果未能解决你的问题,请参考以下文章