我想知道如何让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);
}
}
答案 0 :(得分:0)
有几个选项
灵活布局
你有很多硬编码尺寸,使你的布局不灵活。使用边距和权重,以便框架可以缩放布局。
多个布局
一种选择是为不同的屏幕尺寸创建不同的布局。 您只需创建多个资源文件夹,并在每个文件夹中具有相同名称的布局文件。
如果您希望对布局如何缩放进行大量控制,则此选项很有用。它通常不是首选选项,除非您希望以不同的方式(即平板电脑与电话布局)排列组件,因为它需要维护多个布局文件。
简化布局 顺便说一下,布局对于相同的效果来说可以简单得多。
<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>