简体   繁体   中英

Android determine screen sizes

I'm developing an application which should support multiple screens. For normal screen, I have set my layout inside a viewflipper so my icons won't be crowded. But what I want to do in a large screen is to put all of the icons in just a one layout without using viewflipper to take advantage of the screen.

Here's my layout for normal screen:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/lighterred"
android:layout_gravity="center"
android:orientation="vertical" >

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/logo"
    android:layout_gravity="center"
    android:text="@string/app_name"
    android:textSize="30sp"
    android:padding="15dp"
    android:textStyle="bold"
    android:textColor="@color/white"
    android:contentDescription="@string/app_name" />

<ViewFlipper 
android:id="@+id/mainFlipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout
android:background="@color/white"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center"
android:orientation="vertical" >


<TextView
    android:id="@+id/tvMainNote"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:text="@string/slidetoleft" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >


<Button
    android:id="@+id/ibSymptoms"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/symptoms"
    android:textStyle="bold"
    android:textColor="@color/black"
    android:layout_margin="20dp"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/symptoms" />

<Button
    android:id="@+id/ibConditions"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/conditions"
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:textColor="@color/black"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/conditions" />

<Button
    android:id="@+id/ibMedicalAssessment"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/medicalassessment"
    android:textStyle="bold"
    android:textColor="@color/black"
    android:layout_margin="20dp"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/med_assessments" />

<Button
    android:id="@+id/ibProfile"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/profile"
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:textColor="@color/black"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/profile" />

</LinearLayout> <!-- 2nd row -->


</LinearLayout>


<LinearLayout
android:background="@color/white"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_vertical|center" >


<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
    android:id="@+id/ibTests"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/tests"
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:textColor="@color/black"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/tests" />

<Button
    android:id="@+id/ibTreatment"
    android:layout_margin="20dp"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/treatment"
    android:textStyle="bold"
    android:textColor="@color/black"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/treatment" />


</LinearLayout>


<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
    android:id="@+id/ibSpecialists"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/specialists"
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:textColor="@color/black"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/specialists" />

<Button
    android:id="@+id/ibDisclaimer"
    android:layout_margin="20dp"
    android:layout_width="110dp"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:contentDescription="@string/app_name"
    android:text="@string/about"
    android:textStyle="bold"
    android:textColor="@color/black"
    android:background="@drawable/custom_button"
    android:drawableTop="@drawable/disclaimer" />

</LinearLayout> 


</LinearLayout>

</ViewFlipper>
</LinearLayout>

So how am I able to do it in large screen?

Thanks and regrads.

Preferably you would use the regular xml files and place them in the right folders (eg layout-xlarge) then you have a layout for smaller sizes and layouts for larger sizes.

Also programatically depending on which version of android you are outputting to you would use

getResources().getConfiguration()

and using that find if the device screen size is

SCREENLAYOUT_SIZE_XLARGE

for xlarge screens (> 7inches) or

SCREENLAYOUT_SIZE_LARGE

for large screens (between 4 inches and 7 inches) the first boundry is not defined before HoneyComb (API 11+) while the second boundry has problems on certain devices.

EDIT: I agree with FoamyGuy fragments would be so much better, especially since you can control each fragments logic specifically (eg. create a layout for large screens and create a layout for fragment with small screens (if you want to use a view flipper) or just start a new fragment like a new activity as shown in the Fragment docs).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM