适用于多种屏幕尺寸的Android相对比例

时间:2014-06-24 14:28:31

标签: android dimension

我想知道如何让Android应用支持多种屏幕尺寸。我开发了一款应用程序,在我的7英寸平板电脑上看起来很好但是当我在我的安卓手机上运行相同的应用程序(屏幕小得多)时,一切都不成比例(对齐,大小)。有谁可以帮我解决这个问题。下面是我的应用程序屏幕上的代码,上面有一些按钮和文本。它在平板电脑上看起来很好,但在手机上却看不到。任何人都可以对下面的代码进行任何更改,以便它至少成为我的起点吗?

我的.xml文件的片段

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/theme">

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="50dp">

<TextView
        android:id="@+id/scale_tv"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:layout_marginLeft="65dp"
        android:layout_width="100dp"
        android:layout_height="35dp" />
</LinearLayout>

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="5dp">
<Button
        android:id="@+id/scales"
        android:layout_width="115dip"
        android:layout_height="130dp"
        android:layout_marginLeft="60dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/scale_home_btn"
        android:layout_marginTop="0dp" />
</LinearLayout>
</LinearLayout>

.java文件

package com.demo.uiwithrelativescales;

import android.app.Activity;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class UIwithRelativeScales extends Activity {

    private Button scaleBtn;
    private Button graphBtn;
    private Button notesBtn;
    private Button photosBtn;
    private Button videosBtn;
    private Button audiosBtn;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        if(getResources().getConfiguration().orientation == 1) // portrait
            setContentView(R.layout.portrait_layout);
        else if(getResources().getConfiguration().orientation == 2) // landscape
            setContentView(R.layout.landscape_layout);


        int screenSize = getResources().getConfiguration().screenLayout &
                Configuration.SCREENLAYOUT_SIZE_MASK;

        String toastMsg;
        switch(screenSize) {
            case Configuration.SCREENLAYOUT_SIZE_LARGE:
                toastMsg = "Large screen";
                break;
            case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                toastMsg = "Normal screen";
                break;
            case Configuration.SCREENLAYOUT_SIZE_SMALL:
                toastMsg = "Small screen";
                break;
            default:
                toastMsg = "Screen size is neither large, nor normal or small";
        }
        Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();


        scaleBtn = (Button)findViewById(R.id.scales);
        graphBtn = (Button)findViewById(R.id.graphs);
        notesBtn = (Button)findViewById(R.id.notes);
        photosBtn = (Button)findViewById(R.id.photos);
        videosBtn = (Button)findViewById(R.id.videos);
        audiosBtn = (Button)findViewById(R.id.audios);


        TextView TV_userName = (TextView)findViewById(R.id.welcome_user);

        TV_userName.setText("Current Screen Orientation is "+ 
                getResources().getConfiguration().orientation);

        // the Scale
        TextView scale_heading = (TextView)findViewById(R.id.scale_tv);
        scale_heading.setText("SCALES");
        scale_heading.setBackgroundResource(R.drawable.homebtns_heading);
        scale_heading.setTextColor(Color.WHITE);
        scale_heading.setTypeface(null,Typeface.BOLD);
        scale_heading.setTextSize(20);
        scale_heading.setGravity(Gravity.CENTER);

        // the Graph
        TextView graph_heading = (TextView)findViewById(R.id.graph_tv);
        graph_heading.setText("GRAPHS");
        graph_heading.setBackgroundResource(R.drawable.homebtns_heading);
        graph_heading.setTextColor(Color.WHITE);
        graph_heading.setTypeface(null,Typeface.BOLD);
        graph_heading.setTextSize(20);
        graph_heading.setGravity(Gravity.CENTER);

        // the Notes
        TextView note_heading = (TextView)findViewById(R.id.note_tv);
        note_heading.setText("NOTES");
        note_heading.setBackgroundResource(R.drawable.homebtns_heading);
        note_heading.setTextColor(Color.WHITE);
        note_heading.setTypeface(null,Typeface.BOLD);
        note_heading.setTextSize(20);
        note_heading.setGravity(Gravity.CENTER);

        // the Photos
        TextView photos_heading = (TextView)findViewById(R.id.photos_tv);
        photos_heading.setText("PHOTOS");
        photos_heading.setBackgroundResource(R.drawable.homebtns_heading);
        photos_heading.setTextColor(Color.WHITE);
        photos_heading.setTypeface(null,Typeface.BOLD);
        photos_heading.setTextSize(20);
        photos_heading.setGravity(Gravity.CENTER);

        // the Videos
        TextView video_heading = (TextView)findViewById(R.id.videos_tv);
        video_heading.setText("VIDEOS");
        video_heading.setBackgroundResource(R.drawable.homebtns_heading);
        video_heading.setTextColor(Color.WHITE);
        video_heading.setTypeface(null,Typeface.BOLD);
        video_heading.setTextSize(20);
        video_heading.setGravity(Gravity.CENTER);

        // the Audios
        TextView audio_heading = (TextView)findViewById(R.id.audios_tv);
        audio_heading.setText("AUDIOS");
        audio_heading.setBackgroundResource(R.drawable.homebtns_heading);
        audio_heading.setTextColor(Color.WHITE);
        audio_heading.setTypeface(null,Typeface.BOLD);
        audio_heading.setTextSize(20);
        audio_heading.setGravity(Gravity.CENTER);
    }
}

1 个答案:

答案 0 :(得分:0)

有几个选项

灵活布局

你有很多硬编码尺寸,使你的布局不灵活。使用边距和权重,以便框架可以缩放布局。

多个布局

一种选择是为不同的屏幕尺寸创建不同的布局。 您只需创建多个资源文件夹,并在每个文件夹中具有相同名称的布局文件。

  • RES /布局小
  • RES /布局大
  • RES /布局XLARGE

编辑 further reading

如果您希望对布局如何缩放进行大量控制,则此选项很有用。它通常不是首选选项,除非您希望以不同的方式(即平板电脑与电话布局)排列组件,因为它需要维护多个布局文件。

简化布局 顺便说一下,布局对于相同的效果来说可以简单得多。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/theme">


    <TextView
        android:id="@+id/scale_tv"
        android:layout_marginTop="50dp"
        android:layout_width="100dp"
        android:layout_height="35dp" />


    <Button
        android:id="@+id/scales"
        android:layout_width="115dip"
        android:layout_height="130dp"
        android:layout_marginLeft="60dp"
        android:background="@drawable/scale_home_btn"
        android:layout_marginTop="5dp" />

</LinearLayout>