Android自适应屏幕分辨率

  之前一直受到Android屏幕自适应的困惑。自己想到了一个方法,可以适应所有分辨率。


  大概思路:xml使用绝对布局,在Activity中的onCreate方法重新设定各个控件的大小和位置。


  下面举个例子说明:

  这里我要显示一个正方形的TextView。它的边长刚好是手机宽的一半。

  截图:

  xml:

  控件的坐标都用px表示。

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:orientation="vertical">

	<TextView
		android:layout_height="360px"
		android:layout_width="360px"
		android:gravity="center"
		android:layout_x="0px"
		android:layout_y="0px"
		android:id="@+id/mainTextView1"
		android:background="#000000"
		android:textColor="#ffffff"
		android:textSize="50px"/>

</AbsoluteLayout>

  java文件:
  suitCreen类是把控件view的原始大小根据分辨率进行比例缩放。

package com.text3;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.widget.AbsoluteLayout.*;

public class MainActivity extends Activity 
{
	private TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
		text=(TextView)findViewById(R.id.mainTextView1);
		
		
		suitCreen A=new suitCreen();
		text.setText("分辨率:"+A.getWinH()+"*"+A.getWinW());
		A.suit(text);  //重新设置text的大小和位置		

    }

	
	//自适应屏幕
	class suitCreen{
		//屏幕分辨率
		private int winW,winH;
		public suitCreen(){
			//获取屏幕分辨率
			Display display = getWindowManager().getDefaultDisplay();
			winW=display.getWidth();
			winH=display.getHeight();
		}
		//设置view的坐标和高宽(x,y,w,h)
		public void setButton(int x,int y,int w,int h,View view){
			view.setLayoutParams(
				new AbsoluteLayout.LayoutParams(w,h,x,y));
		}
		//自适应view
		public void suit(View view){
			LayoutParams laParams=(LayoutParams)view.getLayoutParams();
			int x=(int)changeW(laParams.x);
			int y=(int)changeH(laParams.y);
			int w=(int)changeW(laParams.width);
			int h=(int)changeH(laParams.height);
			laParams.x=x;
			laParams.y=y;
			laParams.width=w;
			laParams.height=h;
			view.setLayoutParams(laParams);
		}
		//获取wuinW
		public int getWinW(){
			return winW;
		}
		//获取wuinH
		public int getWinH(){
			return winH;
		}
		//转换winW
		public float changeW(float w){
			return w*winW/720.0f;
		}
		//转换winH
		public float changeH(float h){
			return h*winH/1280.0f;
		}
	}

}

  在另一台手机运行的截图:
  TextView也占据了屏幕宽度的一半。



   这种方法的缺点是在别的手机上控件会有一定的拉伸。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值