5

我有一個相當簡單的登錄頁面在我的Android應用程序,包含標題,用戶名TextView的,密碼的TextView,登錄按鈕和圖像頁腳:如何避免鍵盤啓動或方向改變時Android界面的變化?

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" > 

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ffffff" > 

    <!-- Header Starts --> 

    <LinearLayout 
     android:id="@+id/header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     > 

     <!-- Logo Start --> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/header" /> 
     <!-- Logo Ends --> 
    </LinearLayout> 

    <!-- Header Ends --> 

    <!-- Footer Start --> 
    <LinearLayout android:id="@+id/footer" 
    android:layout_width="fill_parent" 
    android:layout_height="90dip" 
    android:layout_alignParentBottom="true" 
    android:gravity="center"> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/footer" /> 
    </LinearLayout> 
    <!-- Footer Ends --> 

    <!-- Login Form --> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dip" 
     android:layout_below="@+id/header" 
     > 

     <!-- Application Name Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/app_name" 
      android:gravity="center" 
      android:padding="10dip" 
      android:textSize="25dp" 
      android:textStyle="bold" 
     /> 

     <!-- Username Label --> 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="User Name" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/username" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:singleLine="true" /> 
     <!-- Password Label --> 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Password" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/password" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:password="true" 
      android:singleLine="true" /> 
     <!-- Login button --> 

     <Button 
      android:id="@+id/btnLogin" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dip" 
      android:text="Logon" /> 
     </LinearLayout> 
     <!-- Login Form Ends --> 

    </RelativeLayout> 
</ScrollView> 

我有兩個問題,我認爲是相關的:

  1. 當鍵盤向上時,向下滾動時,我看到圖像頁腳「隱藏」在登錄按鈕後面,而不是停留在它下面。
  2. 屏幕水平取向時也是如此。

我試過的東西:

  1. 設置在活動android:windowSoftInputMode="adjustPan",但我希望能夠向下滾動鍵盤出現時,或android:windowSoftInputMode="adjustResize",或任何其他參數有關此事。
  2. 在按鈕中設置marginBottom

都沒有工作。 我將不勝感激任何幫助。

回答

1

我結束了使用RelativeLayout的能力解決這樣的: 我添加了一個ID爲「登陸」命名爲「形式」的LinearLayout中,並加入這一行到被隱藏的按鈕後面的ImageView的:android:layout_below =「@ + id/form」。 然後做了一些整容修改。下面 全碼:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:fillViewport="true" > 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ffffff" > 

    <!-- Header Starts --> 
    <LinearLayout 
     android:id="@+id/header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center"> 

     <!-- Logo Start --> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/header" /> 
     <!-- Logo Ends --> 

    </LinearLayout> 
    <!-- Header Ends --> 

    <!-- Login Form --> 
    <LinearLayout 
     android:id="@+id/form" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dip" 
     android:layout_below="@+id/header"> 

     <!-- Application Name Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/app_name" 
      android:gravity="center" 
      android:padding="10dip" 
      android:textSize="25dp" 
      android:textStyle="bold"/> 

     <!-- Username Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="User Name" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/username" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:singleLine="true" /> 

     <!-- Password Label --> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Password" 
      android:textColor="#372c24" /> 

     <EditText 
      android:id="@+id/password" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="20dip" 
      android:layout_marginTop="5dip" 
      android:password="true" 
      android:singleLine="true" /> 

     <!-- Login button --> 
     <Button 
      android:id="@+id/btnLogin" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dip" 
      android:text="Logon" /> 
    </LinearLayout> 
    <!-- Login Form Ends --> 

    <!-- Footer Start --> 
    <LinearLayout android:id="@+id/footer" 
     android:layout_width="fill_parent" 
     android:layout_height="90dip" 
     android:layout_alignParentBottom="true" 
     android:gravity="bottom|center" 
     android:paddingBottom="10dip" 
     android:layout_below="@+id/form" 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dip" 
      android:src="@drawable/footer" /> 

     </LinearLayout> 
     <!-- Footer Ends --> 

    </RelativeLayout> 

</ScrollView> 

感謝。

1

在您的活動選項卡中打開您的manifest.xml文件.change。

<activity 
      android:configChanges="keyboardHidden|orientation" 
      android:name=".testActivity" 
      android:label="@string/app_name"></activity> 
+1

您是否也指我應該在onConfigurationChanged方法中寫入內容?因爲我不知道在配置更改時要更改什麼......只有編寫您的建議不起作用......謝謝 – MichalK 2012-08-02 10:44:55

0
<activity 
      android:configChanges="adjustPan" 
      android:name=".testActivity" 
      android:label="@string/app_name"></activity> 

請參閱「android:windowSoftInputMode」。可用的模式here