views:

36

answers:

2

I am having a problem in ScrollView. When i run my application on X10i it works fine but when i change the view to landscape half of the layout at the bottom (RelativeLayout) go down to the screen. Here is my Layout code. please suggest a general solution that will be applicable to all phones not only X10i.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_height="wrap_content"  
android:layout_width="fill_parent"> 
android:layout_marginBottom="50dip"> 

<ScrollView  
android:id="@+id/ScrollView"  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="2dip" > 

<RelativeLayout 
android:id="@+id/layoutR" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"> 

<ImageView android:id="@+id/galleryPic" 
        android:layout_width="140dip" 
        android:layout_height="175dip" 
        android:background="#ff666666" /> 

     <TextView 
     android:id="@+id/lblmail" 
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:layout_alignParentTop="true" 
        android:layout_marginLeft="5dip"  
        android:text="E_mail:" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/galleryPic" /> 

     <EditText  
     android:id="@+id/txt_email"  
     android:layout_width="170dip" 
        android:layout_height="32dip"  
        android:layout_marginLeft="5dip" 
        android:hint="e-mail"  
        android:maxLines="1"  
        android:textSize="10sp" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/galleryPic"  
        android:layout_below="@+id/lblmail" /> 

     <TextView  
     android:id="@+id/lblpass"  
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:layout_marginLeft="5dip" 
        android:text="Password:"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/galleryPic"  
        android:layout_below="@+id/txt_email" /> 

     <EditText  
     android:id="@+id/txt_pass"  
     android:layout_width="170dip" 
        android:layout_height="32dip"  
        android:password="true" 
        android:maxLines="1"  
        android:layout_marginLeft="5dip"  
        android:hint="password" 
        android:textSize="10sp"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/galleryPic"  
        android:layout_below="@+id/lblpass" /> 

     <TextView  
     android:id="@+id/lblrepass"  
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:layout_marginLeft="5dip" 
        android:text="Re-Password:"  
        android:typeface="serif" 
        android:textStyle="bold"  
        android:layout_toRightOf="@+id/galleryPic" 
        android:layout_below="@+id/txt_pass" /> 

     <EditText  
     android:id="@+id/txt_repass"  
     android:layout_width="170dip" 
        android:layout_height="32dip"  
        android:password="true" 
        android:maxLines="1"  
        android:layout_marginLeft="5dip"  
        android:hint="re-password" 
        android:textSize="10sp"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/galleryPic"  
        android:layout_below="@+id/lblrepass" /> 

     <Button  
     android:id="@+id/btn_Gallery"  
     android:layout_width="wrap_content" 
        android:layout_height="wrap_content"  
        android:gravity="center" 
        android:typeface="serif"  
        android:textStyle="bold"  
        android:text="Browse" 
        android:layout_below="@+id/galleryPic" /> 

     <TextView  
     android:id="@+id/lblname"  
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:text="Name:"  
        android:typeface="serif" 
        android:textStyle="bold"  
        android:layout_marginTop="6dip" 
        android:layout_below="@+id/btn_Gallery" /> 

     <EditText  
     android:id="@+id/txt_name"  
     android:layout_width="224dip" 
        android:layout_height="32dip"  
        android:hint="name"  
        android:maxLines="1" 
        android:textSize="10sp"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_marginTop="3dip"  
        android:layout_toRightOf="@+id/lblname" 
        android:layout_below="@+id/btn_Gallery"  
        android:layout_marginLeft="5dip" /> 

     <TextView  
     android:id="@+id/lblage"  
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:text="Age:"  
        android:typeface="serif" 
        android:textStyle="bold"  
        android:layout_marginTop="9dip" 
        android:layout_below="@+id/lblname" /> 

     <EditText  
     android:id="@+id/txt_age"  
     android:layout_width="225dip" 
        android:layout_height="32dip"  
        android:hint="age"  
        android:numeric="integer" 
        android:maxLines="1"  
        android:maxLength="3"  
        android:textSize="10sp" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/lblage"  
        android:layout_below="@+id/txt_name" 
        android:layout_marginLeft="19dip" /> 

     <TextView  
     android:id="@+id/lblsex"  
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:text="Sex:"  
        android:typeface="serif" 
        android:textStyle="bold"  
        android:layout_marginTop="12dip" 
        android:layout_below="@+id/lblage" /> 

     <EditText  
     android:id="@+id/txt_sex"  
     android:layout_width="226dip" 
        android:layout_height="32dip"  
        android:hint="sex"  
        android:maxLines="1" 
        android:textSize="10sp"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/lblsex"  
        android:layout_below="@+id/txt_age" 
        android:layout_marginLeft="20dip" /> 

     <TextView  
     android:id="@+id/lbllocation" 
        android:layout_width="wrap_content"  
        android:layout_height="21dip" 
        android:text="Location:"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_marginTop="12dip"  
        android:layout_below="@+id/lblsex" /> 

     <EditText  
     android:id="@+id/txt_location" 
        android:layout_width="206dip"  
        android:layout_height="32dip" 
        android:hint="location"  
        android:maxLines="1"  
        android:textSize="10sp" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/lbllocation"  
        android:layout_below="@+id/txt_sex" 
        android:layout_marginLeft="5dip" /> 

     <TextView  
     android:id="@+id/lblstatus"  
     android:layout_width="wrap_content" 
        android:layout_height="21dip"  
        android:text="Status:" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_marginTop="12dip"  
        android:layout_below="@+id/lbllocation" /> 

     <EditText  
     android:id="@+id/txt_status"  
     android:layout_width="225dip" 
        android:layout_height="32dip"  
        android:hint="status"  
        android:maxLines="1" 
        android:textSize="10sp"  
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/lblstatus"  
        android:layout_below="@+id/txt_location" 
        android:layout_marginLeft="5dip" /> 

        <TextView  
        android:id="@+id/lblinterest" 
        android:layout_width="wrap_content"  
        android:layout_height="21dip" 
        android:text="Interest:"  
        android:typeface="serif" android:textStyle="bold" 
        android:layout_marginTop="12dip"  
        android:layout_below="@+id/lblstatus" /> 

        <EditText  
        android:id="@+id/txt_interest" 
        android:layout_width="212dip"  
        android:layout_height="32dip" 
        android:hint="interest"  
        android:maxLines="1"  
        android:textSize="10sp" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/lblinterest"  
        android:layout_below="@+id/txt_status" 
        android:layout_marginLeft="5dip" /> 

     <TextView  
     android:id="@+id/lblorientation" 
        android:layout_width="wrap_content"  
        android:layout_height="21dip" 
        android:text="Orientation:"  
        android:typeface="serif" 
        android:textStyle="bold"  
        android:layout_marginTop="12dip" 
        android:layout_below="@+id/lblinterest" /> 

        <EditText  
        android:id="@+id/txt_orientation" 
        android:layout_width="187dip" 
        android:layout_height="32dip" 
        android:hint="status" 
        android:maxLines="1" 
        android:textSize="10sp" 
        android:typeface="serif"  
        android:textStyle="bold" 
        android:layout_toRightOf="@+id/lblorientation" 
        android:layout_below="@+id/txt_interest" 
        android:layout_marginLeft="5dip"/></RelativeLayout></ScrollView> 
<RelativeLayout 
  android:layout_marginTop="-32dip" 
  android:gravity="bottom" 
  android:layout_height="50dip"  
  android:layout_width="fill_parent"
  android:background="#ff999999"> 

<Button  
 android:id="@+id/btnNext"  
 android:layout_width="100dip"  
 android:layout_height="45dip"  
 android:text="Next" 
 android:layout_marginTop="2dip" 
 android:layout_alignParentRight="true"/></RelativeLayout></LinearLayout>
A: 

Use two diferent layouts, one for portrait and one for landscape.

Just like you have a layout folder in your workspace. Create a layout-land folder, copy the xml into that new folder with the same name, and modify it to look how you want it to. In other words, if your xml is called main.xml, you will have one main.xml in layout and one in layout-land.

Android will be smart enough to choose the apropiate layout based on the orientation.

blindstuff
any other solution rather than this? and one more thing, does it effect if the screen size increase or decreas because all phones have different screen sizes.
SilentCoder
Read this, it should answer your question.http://developer.android.com/guide/practices/screens_support.html
blindstuff
+1  A: 

That's a lot of XML. O_o

Creating two separate layouts really shouldn't be necessary to fix the problem you're having. Here is what I would suggest (I'm cutting out the intermediate TextViews, just to shorten the example):

<?xml version="1.0" encoding="utf-8"?>  

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_height="fill_parent"   
    android:layout_width="fill_parent"
    >  
    <RelativeLayout
        android:id="@+id/footer"  
        android:layout_height="wrap_content"   
        android:layout_width="fill_parent" 
        android:background="#ff999999"
    android:layout_alignParentBottom="true"
        >  
        <Button   
            android:id="@+id/btnNext"   
            android:layout_width="wrap_content"   
            android:layout_height="wrap_content"   
            android:text="Next"  
            android:layout_marginTop="2dip" />
    </RelativeLayout>

    <ScrollView   
        android:id="@+id/ScrollView"   
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:layout_marginTop="2dip" 
        android:layout_above="@id/footer"
            android:layout_alignParentTop="true"
        >  
        <RelativeLayout  
            android:id="@+id/layoutR"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"
            >

        //XML removed for ease of viewing

        </RelativeLayout>
    </ScrollView>    
</RelativeLayout>

Basically, putting the whole thing into a RelativeLayout set to fill_parent. Define your footer (with the "Next" button) first, and align it to the bottom right. Next, define your ScrollView set to fill_parent as well, and aligned above your footer (this will make the ScrollView fill all available space remaining after the footer is defined). And of course, place all your TextViews and EditTexts, etc., back into that RelativeLayout. I'm not able to test this right now, but it should get you fairly close.

kcoppock
I have doen it but now the RelativeLayout (footer) is on top and there is no scrollView. Please try to run it on your system.
SilentCoder
Try it again. I just made some changes, I'd put the alignParent* statements on the button rather than the RelativeLayout by mistake.
kcoppock
You are genius :) Thanks alot for your help.
SilentCoder
No problem :) Don't forget to mark this as the accepted answer if it works for you.
kcoppock
@Kcoppock: when i open application everything works fine but when i hide the keypad there comes some extra space at the top of the application. Why is it happening :( any suggestion ??
SilentCoder
Hmm, seems like if anything you'd have space at the bottom. I've made a few modifications, mostly changing things to wrap_content versus fixed dp sizes. See if it helps.
kcoppock
KCOPPOCK i have solved the problem. Just set alignParentTop attribute to true android:layout_alignParentTop="true". Thanks alot for your help :)
SilentCoder
by da way how can i mark it as accepted answer ??
SilentCoder
Glad you were able to get it working! Just click the checkmark to the left of the answer.
kcoppock