多分辨率设备支持

http://www.ophonesdn.com.cn/article/show/42

1、多分辨率设备支持

        随着OPhone平台的问世,越来越多的个人和企业开发者都将更多的目光投向了这个基于开放移动系统的智能手机平台。OPhone应用开发社区也在不断壮大。但我们发现,OPhone应用开发常常会遇到多分辨率支持的问题。OPhone平台对这个问题提供了一个很好的解决方案。以下将通过详细的实例来向大家介绍这一解决方案。(作者:李若飞)

1.1 HVGA(480x320)分辨率支持实例

1.1.1创建一个新的工程

        命名为diffResolutioin,工程结构如下图所示:

1.1.2 创建两个Activity

        同时需要创建两个类,第一个命名为diffResolution.java,源代码如下:

 

view plain copy to clipboard print ?
  1. package com.test.diffResolution;   
  2.   
  3. import android.app.Activity;   
  4. import android.content.Intent;   
  5. import android.os.Bundle;   
  6. import android.view.View;   
  7. import android.view.View.OnClickListener;   
  8. import android.widget.Button;   
  9. import android.widget.TextView;   
  10.   
  11. public class diffResolution extends Activity implements OnClickListener{   
  12.     /** Called when the activity is first created. */  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {   
  15.         super.onCreate(savedInstanceState);   
  16.          setContentView(R.layout.main);   
  17.          TextView ResultText = (TextView)findViewById(R.id.ResultText);   
  18.          ResultText.setText("The app is created for the different image resolution test!");   
  19.          Button ResolutionTest = (Button)findViewById(R.id.ResolutionTest);   
  20.          ResolutionTest.setOnClickListener(this);   
  21.      }   
  22.   
  23.     public void onClick(View arg0) {   
  24.         if (arg0.getId() == R.id.ResolutionTest) {   
  25.              startTest();   
  26.              }   
  27.      }   
  28.        
  29.     private void startTest() {   
  30.         //Start another Activity by Intent   
  31.          Intent intent = new Intent (diffResolution.this, startTest.class);   
  32.          startActivity(intent);   
  33.      }   
  34. }  

        另一个命名为startTest.java,源代码如下:

 

view plain copy to clipboard print ?
  1. package com.test.diffResolution;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.widget.Button;   
  6. import android.widget.TextView;   
  7.   
  8. public class startTest extends Activity{   
  9.     public void onCreate(Bundle savedInstanceState) {   
  10.         super.onCreate(savedInstanceState);   
  11.          setContentView(R.layout.start_test);   
  12.      }   
  13. }  

 

1.1.3 用户界面布局文件

 

        需要对每个Activity编辑页面布局文件:main.xml和start_test.xml。main.xml源代码如下:

 

1.1.4 运行程序

        直接运行,得到如下应用界面:

     

 

1.2 多分辨率设备兼容性问题

        可以看到,测试页面的用户界面布局清晰合理。但当把同一应用安装在分辨率为nHD(640x360)的设备上,用户界面还会是这样么?

    

 

        由于分辨率的不同,导致用户界面的图片布局出现了比较严重的偏离。如何避免这一问题,OPhone平台提供了同一应用适应不同分辨率设备的解决方案。

1.3 多分辨率设备兼容性问题解决方案

1.3.1 基本思路

  1. 首先应当明确应用希望支持几种分辨率设备;
  2. 其次,需明确哪些资源文件在不同分辨率的设备存在显示问题;
  3. 对于显示有问题的,需要重新准备与相应分辨率设备适配的资源文件和页面布局文件。

        下面我们就上面的例子来修改使之适配不同的分辨率。当前例子的适配分辨率是480x320,我们希望通过修改,能使其适配nHD(640x360)的分辨率。

1.3.2工程目录更新

        在res目录下创建两个新的文件夹,分别命名为drawable-640x360和layout-640x360。这里需要注意的是,较大的值应该放在前面。然后将适配当前分辨率的图片文件加载到drawable-640x360,同时保证这里加载的图片名称应该和drawable目录下的对应的图片名称一致。图片加载完成后,就需要依据当前的分辨率创建新的页面布局文件,布局文件存放在layout-640x360文件夹里。同样,这里的页面布局文件名称也应该和layout目录下相应的布局文件名称一致。

1.3.3 页面布局文件调整

        接下来,就可以按照相应的分辨率来对我们的应用进行调试,对layout-640x360目录下的页面布局进行调整,使之适配分辨率为nHD(640x360)的设备。start_test.xml源代码为:

 

view plain copy to clipboard print ?
  1. <?xml version="1.0" encoding="utf-8"?>   
  2.        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.      android:id="@+id/base_layout"  
  4.      android:layout_width="360px"  
  5.      android:layout_height="570px"  
  6.      android:orientation="vertical"  
  7.      android:background="@drawable/testpic">   
  8.        
  9.      <RelativeLayout   
  10.      android:id="@+id/test_button"  
  11.      android:layout_width="wrap_content"  
  12.      android:layout_height="wrap_content"  
  13.      android:layout_alignParentRight="true"  
  14.      android:layout_marginRight="90dip"  
  15.      android:layout_alignParentTop="true"  
  16.      android:layout_marginTop="70dip"  
  17.      android:background="@drawable/title_text"/>   
  18.        
  19.      <RelativeLayout   
  20.      android:id="@+id/test_button"  
  21.      android:layout_width="wrap_content"  
  22.      android:layout_height="wrap_content"  
  23.      android:layout_alignParentRight="true"  
  24.      android:layout_marginRight="90dip"  
  25.      android:layout_alignParentTop="true"  
  26.      android:layout_marginTop="180dip"  
  27.      android:background="@drawable/chess"/>   
  28.        
  29.      <RelativeLayout   
  30.      android:id="@+id/test_button"  
  31.      android:layout_width="wrap_content"  
  32.      android:layout_height="wrap_content"  
  33.      android:layout_alignParentRight="true"  
  34.      android:layout_marginRight="30dip"  
  35.      android:layout_alignParentBottom="true"  
  36.      android:layout_marginBottom="25dip"  
  37.      android:background="@drawable/start1"/>   
  38.        
  39.      <RelativeLayout   
  40.      android:id="@+id/test_button"  
  41.      android:layout_width="wrap_content"  
  42.      android:layout_height="wrap_content"  
  43.      android:layout_alignParentRight="true"  
  44.      android:layout_marginRight="45dip"  
  45.      android:layout_alignParentBottom="true"  
  46.      android:layout_marginBottom="75dip"  
  47.      android:background="@drawable/start2"/>   
  48.        
  49.      <RelativeLayout   
  50.      android:id="@+id/test_button"  
  51.      android:layout_width="wrap_content"  
  52.      android:layout_height="wrap_content"  
  53.      android:layout_alignParentLeft="true"  
  54.      android:layout_marginLeft="30dip"  
  55.      android:layout_alignParentBottom="true"  
  56.      android:layout_marginBottom="25dip"  
  57.      android:background="@drawable/close1"/>   
  58.      
  59.      <RelativeLayout   
  60.      android:id="@+id/test_button"  
  61.      android:layout_width="wrap_content"  
  62.      android:layout_height="wrap_content"  
  63.      android:layout_alignParentLeft="true"  
  64.      android:layout_marginLeft="40dip"  
  65.      android:layout_alignParentBottom="true"  
  66.      android:layout_marginBottom="78dip"  
  67.      android:background="@drawable/close2"/>   
  68. </RelativeLayout>  

        对比drawable文件夹下的starttest.xml文件和drawable-640x360文件夹下的starttest.xml,我们发现,二者的区别就是对图片资源文件testpic.png, title_text.png和chess.png的页面布局调整。

你可能感兴趣的:(多分辨率设备支持)