android 分辨率適配的方法
第一步,先創(chuàng)建一個(gè)view信息的javabean類:
package com.zte.layout.adapter;
import android.view.View;
/**
* 存儲(chǔ)View信息的JavaBean類
*
* @author
*
*/
public class LayoutInformation
{
/**
* View的對(duì)象
*/
private View view;
/**
* View的寬度
*/
private double viewWidth;
/**
* View的高度
*/
private double viewHeight;
/**
* View距左邊的距離,即marginLeft
*/
private double viewMarginLeft;
/**
* View距頂部的距離,即MarginTop;
*/
private double viewMarginTop;
/**
* 父類布局的類型為相對(duì)布局
*/
public static int R=-1;
/**
* 父類布局的類型為線性布局
*/
public static int L=-2;
/**
* 此View的父類布局的類型
*/
private int parentLayoutType;
/**
* 存儲(chǔ)View信息的JavaBean類
*
* @param view
* View的對(duì)象
* @param viewWidth
* View的寬
* @param viewHeight
* View的高
* @param viewMarginLeft
* View距左邊的距離
* @param viewMargdoubleop
* View距上部的距離
* @param parentLayoutType
* 父類布局的類型,LayoutInformation.R
* (表示相對(duì)布局)或者LayoutInformation.L(表示線性布局)
*/
public LayoutInformation(View view, double viewWidth, double viewHeight,
double viewMarginLeft, double viewMarginTop, int parentLayoutType)
{
this.view = view;
this.viewWidth = viewWidth;
this.viewHeight = viewHeight;
this.viewMarginLeft = viewMarginLeft;
this.viewMarginTop = viewMarginTop;
this.parentLayoutType=parentLayoutType;
}
/**
* 獲取View的對(duì)象
*
* [url=home.php?mod=space&uid=7300]@return[/url] View對(duì)象
*/
public View getView()
{
return view;
}
/**
* 設(shè)置View的對(duì)象
*/
public void setView(View view)
{
this.view = view;
}
/**
* 獲取View的寬度
*
* @return View的寬度,double型
*/
public double getViewWidth()
{
return viewWidth;
}
/**
* 設(shè)置View的寬度,double型
*
* @param viewWidth
*/
public void setViewWidth(double viewWidth)
{
this.viewWidth = viewWidth;
}
/**
* 獲取View的高度
*
* @return View的高度,double型
*/
public double getViewHeight()
{
return viewHeight;
}
/**
* 設(shè)置View的高度,double型
*
* @param viewHeight
*/
public void setViewHeight(double viewHeight)
{
this.viewHeight = viewHeight;
}
/**
* 獲取View距離左邊的距離
*
* @return View距離左邊的距離,double型
*/
public double getViewMarginLeft()
{
return viewMarginLeft;
}
/**
* 設(shè)置View距離左邊的距離,double型
*
* @param viewMarginLeft
*/
public void setViewMarginLeft(double viewMarginLeft)
{
this.viewMarginLeft = viewMarginLeft;
}
/**
* 獲取View距離上部的距離
*
* @return View距離上部的距離,double型
*/
public double getViewMarginTop()
{
return viewMarginTop;
}
/**
* 設(shè)置View距離上部的距離,double型
*
* @param viewMargdoubleop
*/
public void setViewMarginTop(double viewMarginTop)
{
this.viewMarginTop = viewMarginTop;
}
/**
* 獲取父類布局的類型
* @return parentLayoutType,int型
*/
public int getParentLayoutType()
{
return parentLayoutType;
}
/**
* 設(shè)置父類布局的類型
* @param parentLayoutType
*/
public void setParentLayoutType(int parentLayoutType)
{
this.parentLayoutType = parentLayoutType;
}
}
第二步:創(chuàng)建一個(gè)計(jì)算方法:
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
/**
* 分配率通配類
*
* @author
*
*/
public class MyLayoutAdapter
{
/**
* 基準(zhǔn)分辨率的寬
*/
public double STANDARD_SCREEN_WIDTH;
/**
* 基準(zhǔn)分辨率的高
*/
public double STANDARD_SCREEN_HEIGHT;
/**
* 系統(tǒng)當(dāng)前的分辨率的寬
*/
public double CURRENT_SCREEN_WIDTH;
/**
* 系統(tǒng)當(dāng)前的分辨率的高
*/
public double CURRENT_SCREEN_HEIGHT;
/**
* 基準(zhǔn)屏幕密度
*/
public static final double STANDARD_DENSITY = 160;
/**
* 當(dāng)前屏幕密度
*/
private double CURRENT_DENSITY;
/**
* 屏幕密度比例
*/
private double DENSITY_RATIO;
/**
* 屏幕寬度比例
*/
private double WIDTH_RATIO;
/**
* 屏幕高度比例
*/
private double HEIGHT_RATIO;
/**
* 組件基準(zhǔn)的寬度
*/
private double viewStandardWidth;
/**
* 組件基準(zhǔn)的高度
*/
private double viewStandardHeight;
/**
* 組件基準(zhǔn)的距離左邊的距離
*/
private double viewStandardMarginLeft;
/**
* 組件基準(zhǔn)的距離頂部的距離
*/
private double viewStandardMarginTop;
/**
* 組件當(dāng)前的寬
*/
private double viewCurrentWidth;
/**
* 組件當(dāng)前的高
*/
private double viewCurrentHeight;
/**
* 組件當(dāng)前距離左邊的距離
*/
private double viewCurrentMarginLeft;
/**
* 組件當(dāng)前距離頂部的距離
*/
private double viewCurrentMarginTop;
/**
* UI組件的對(duì)象
*/
private View view;
/**
* 此View的父類布局的類型
*/
private int parentLayoutType;
/**
* 父類布局的類型為相對(duì)布局
*/
private final int LAYOUT_TYPE_RELATiVELAYOUT = LayoutInformation.R;
/**
* 父類布局的類型為線性布局
*/
private final int LAYOUT_TYPE_LINEARLAYOUT = LayoutInformation.L;
/**
* 布局屬性為wrap_content
*/
private final int LAYOUTPARAMS_WARP_CONTENT = LayoutParams.WRAP_CONTENT;
/**
* 布局屬性為fill_parent
*/
private final int LAYOUTPARAMS_FILL_PARENT = LayoutParams.FILL_PARENT;
private Context context;
/**
* 類對(duì)象實(shí)例化時(shí),設(shè)置 基準(zhǔn)屏幕寬度,高度
*
* @param context
* Context
* @param standardWidth
* 基準(zhǔn)屏幕的寬
* @param standardHeight
* 基準(zhǔn)屏幕的高
*/
public MyLayoutAdapter(Context context, double standardWidth,
double standardHeight)
{
this.context = context;
getScreenSize();
STANDARD_SCREEN_HEIGHT = standardHeight;
STANDARD_SCREEN_WIDTH = standardWidth;
// 計(jì)算寬高比率
WIDTH_RATIO = CURRENT_SCREEN_WIDTH / STANDARD_SCREEN_WIDTH;
HEIGHT_RATIO = CURRENT_SCREEN_HEIGHT / STANDARD_SCREEN_HEIGHT;
}
/**
* 獲取當(dāng)前屏幕大小和密度
*/
private void getScreenSize()
{
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay()
getMetrics(displayMetrics);
CURRENT_SCREEN_WIDTH = displayMetrics.widthPixels;
CURRENT_SCREEN_HEIGHT = displayMetrics.heightPixels;
CURRENT_DENSITY = displayMetrics.densityDpi;
DENSITY_RATIO = STANDARD_DENSITY / CURRENT_DENSITY;
}
/**
* 進(jìn)行通配
*
* @param listdata
*/
public void setViewLayout(List<LayoutInformation> listdata)
{
for (int i = 0; i < listdata.size(); i++)
{
view = listdata.get(i).getView();
viewStandardWidth = listdata.get(i).getViewWidth();
viewStandardHeight = listdata.get(i).getViewHeight();
viewStandardMarginLeft = listdata.get(i).getViewMarginLeft();
viewStandardMarginTop = listdata.get(i).getViewMarginTop();
setLayoutParams();
viewCurrentMarginLeft = viewStandardMarginLeft * WIDTH_RATIO;
viewCurrentMarginTop = viewStandardMarginTop * HEIGHT_RATIO;
parentLayoutType = listdata.get(i).getParentLayoutType();
setLayoutByParentLayoutType();
}
}
/**
* 判斷布局屬性的值,設(shè)置布局的屬性
*/
private void setLayoutParams()
{
// 如果基準(zhǔn)的寬是wrap_content或者fill_parent則使用原值,否則進(jìn)行計(jì)算得到通配后的值
if (viewStandardWidth == LAYOUTPARAMS_WARP_CONTENT
|| viewStandardWidth == LAYOUTPARAMS_FILL_PARENT)
{
viewCurrentWidth = viewStandardWidth;
} else
{
viewCurrentWidth = viewStandardWidth * WIDTH_RATIO;
}
// 如果基準(zhǔn)的寬是wrap_content或者fill_parent則使用原值,否則進(jìn)行計(jì)算得到通配后的值
if (viewStandardHeight == LAYOUTPARAMS_WARP_CONTENT
|| viewStandardHeight == LAYOUTPARAMS_FILL_PARENT)
{
viewCurrentHeight = viewStandardHeight;
} else
{
viewCurrentHeight = viewStandardHeight * HEIGHT_RATIO;
}
}
/**
* 通過(guò)判斷此View父類的布局類型,給此View設(shè)置布局
*/
private void setLayoutByParentLayoutType()
{
if (parentLayoutType == LAYOUT_TYPE_RELATiVELAYOUT)
{
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
(int) viewCurrentWidth, (int) viewCurrentHeight);
params.setMargins((int) viewCurrentMarginLeft,
(int) viewCurrentMarginTop, 0, 0);
view.setLayoutParams(params);
} else if (parentLayoutType == LAYOUT_TYPE_LINEARLAYOUT)
{
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
(int) viewCurrentWidth, (int) viewCurrentHeight);
params.setMargins((int) viewCurrentMarginLeft,
(int) viewCurrentMarginTop, 0, 0);
view.setLayoutParams(params);
}
}
/**
* 設(shè)置字體大小
*
* @param standardSize
* 原始大小
* @return int
*/
public int setTextSize(int standardSize)
{
int currentSize;
currentSize = (int) (standardSize * WIDTH_RATIO * DENSITY_RATIO);
return currentSize;
}
}
第三步,寫一個(gè)接口:
public interface InitAllView{
/**
* 初始化控件的大小
*/
public void initAllView();
}
第四步:代碼控制:
/**
* 通配方法
*/
private void initWildcard() {
myLayout = new MyLayoutAdapter(this, 320, 480);
listInfo = new ArrayList<LayoutInformation>();
listInfo.add(new LayoutInformation(mBtn1, LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, 0, 0, LayoutInformation.R));
listInfo.add(new LayoutInformation(mNowRegisterBtn, 80, 27.3, 14.7, 0,
LayoutInformation.R));
listInfo.add(new LayoutInformation(mNextRegisterBtn, 80, 27.3, 14.7, 0,
LayoutInformation.R));
// listInfo.add(new LayoutInformation(mCheckBtn, 17.3,17.3, 14.7, 0,
// LayoutInformation.L));
mBtn1.setTextSize(myLayout.setTextSize(12));
mNowRegisterBtn.setTextSize(myLayout.setTextSize(12));
mNextRegisterBtn.setTextSize(myLayout.setTextSize(12));
myLayout.setViewLayout(listInfo);
}
相關(guān)文章
詳解Android中用于線程處理的AsyncTask類的用法及源碼
這篇文章主要介紹了Android中用于線程處理的AsyncTask類的用法及源碼,講到了實(shí)現(xiàn)AsyncTask中所用到的Handler及線程池等要點(diǎn),需要的朋友可以參考下2016-05-05
Android輪播圖點(diǎn)擊圖片放大效果的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Android輪播圖點(diǎn)擊圖片放大效果的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Crashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)
下面小編就為大家?guī)?lái)一篇Crashlytics Android 異常報(bào)告統(tǒng)計(jì)管理(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Android 播放視頻常見(jiàn)問(wèn)題小結(jié)
這篇文章主要介紹了Android 播放視頻常見(jiàn)問(wèn)題小結(jié),需要的朋友可以參考下2017-04-04
android實(shí)現(xiàn)簡(jiǎn)單的乘法計(jì)算代碼
本文完成輸入2個(gè)數(shù)相乘,并顯示其結(jié)果。共涉及到4個(gè)控件的使用學(xué)習(xí),輸入數(shù)字采用EditText,顯示結(jié)果用TextView,運(yùn)算按鈕button以及菜單中的退出鍵2013-11-11
Android開發(fā)實(shí)現(xiàn)長(zhǎng)按返回鍵彈出關(guān)機(jī)框功能
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)長(zhǎng)按返回鍵彈出關(guān)機(jī)框功能,涉及Android針對(duì)長(zhǎng)按事件的響應(yīng)與處理相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
Android開發(fā)手冊(cè)SeekBar拖動(dòng)條使用實(shí)例
這篇文章主要為大家介紹了Android開發(fā)手冊(cè)SeekBar拖動(dòng)條使用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Android中判斷網(wǎng)絡(luò)連接是否可用的方法總結(jié)
這篇文章主要介紹了Android中判斷網(wǎng)絡(luò)連接是否可用的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android實(shí)戰(zhàn)教程第四十三篇之上拉加載與下拉刷新
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第四十三篇之上拉加載與下拉刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11

