亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android 分辨率適配的方法

2020-04-11 12:40:47
字體:
來源:轉載
供稿:網友
以前在公司做項目的時候,遇到了分辨率的適配問題,說起來當時挺糾結的,因為沒有外網,所以這個問題,都是黑暗中摸索的,嘗試了許多方法,最后和徒弟們一起搞出了這個方法,具體行不行,先和大家分享下,這個方法不能說萬能的,但是最起碼它解決了分辨率跟密集度的關系,但是也引來一個問題,就是布局會因為圖片資源小而失真,所以這也需要美工的同志多多配合的,廢話不說,貼代碼:
第一步,先創建一個view信息的javabean類
復制代碼 代碼如下:

package com.zte.layout.adapter;
import android.view.View;
/**
* 存儲View信息的JavaBean類
*
* @author
*
*/
public class LayoutInformation
{
/**
* View的對象
*/
private View view;
/**
* View的寬度
*/
private double viewWidth;
/**
* View的高度
*/
private double viewHeight;
/**
* View距左邊的距離,即marginLeft
*/
private double viewMarginLeft;
/**
* View距頂部的距離,即MarginTop;
*/
private double viewMarginTop;
/**
* 父類布局的類型為相對布局
*/
public static int R=-1;
/**
* 父類布局的類型為線性布局
*/
public static int L=-2;
/**
* 此View的父類布局的類型
*/
private int parentLayoutType;
/**
* 存儲View信息的JavaBean類
*
* @param view
* View的對象
* @param viewWidth
* View的寬
* @param viewHeight
* View的高
* @param viewMarginLeft
* View距左邊的距離
* @param viewMargdoubleop
* View距上部的距離
* @param parentLayoutType
* 父類布局的類型,LayoutInformation.R
* (表示相對布局)或者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的對象
*
* [url=home.php?mod=space&uid=7300]@return[/url] View對象
*/
public View getView()
{
return view;
}
/**
* 設置View的對象
*/
public void setView(View view)
{
this.view = view;
}
/**
* 獲取View的寬度
*
* @return View的寬度,double型
*/
public double getViewWidth()
{
return viewWidth;
}
/**
* 設置View的寬度,double型
*
* @param viewWidth
*/
public void setViewWidth(double viewWidth)
{
this.viewWidth = viewWidth;
}
/**
* 獲取View的高度
*
* @return View的高度,double型
*/
public double getViewHeight()
{
return viewHeight;
}
/**
* 設置View的高度,double型
*
* @param viewHeight
*/
public void setViewHeight(double viewHeight)
{
this.viewHeight = viewHeight;
}
/**
* 獲取View距離左邊的距離
*
* @return View距離左邊的距離,double型
*/
public double getViewMarginLeft()
{
return viewMarginLeft;
}
/**
* 設置View距離左邊的距離,double型
*
* @param viewMarginLeft
*/
public void setViewMarginLeft(double viewMarginLeft)
{
this.viewMarginLeft = viewMarginLeft;
}
/**
* 獲取View距離上部的距離
*
* @return View距離上部的距離,double型
*/
public double getViewMarginTop()
{
return viewMarginTop;
}
/**
* 設置View距離上部的距離,double型
*
* @param viewMargdoubleop
*/
public void setViewMarginTop(double viewMarginTop)
{
this.viewMarginTop = viewMarginTop;
}
/**
* 獲取父類布局的類型
* @return parentLayoutType,int型
*/
public int getParentLayoutType()
{
return parentLayoutType;
}
/**
* 設置父類布局的類型
* @param parentLayoutType
*/
public void setParentLayoutType(int parentLayoutType)
{
this.parentLayoutType = parentLayoutType;
}
}

第二步:創建一個計算方法
復制代碼 代碼如下:

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
{
/**
* 基準分辨率的寬
*/
public double STANDARD_SCREEN_WIDTH;
/**
* 基準分辨率的高
*/
public double STANDARD_SCREEN_HEIGHT;
/**
* 系統當前的分辨率的寬
*/
public double CURRENT_SCREEN_WIDTH;
/**
* 系統當前的分辨率的高
*/
public double CURRENT_SCREEN_HEIGHT;
/**
* 基準屏幕密度
*/
public static final double STANDARD_DENSITY = 160;
/**
* 當前屏幕密度
*/
private double CURRENT_DENSITY;
/**
* 屏幕密度比例
*/
private double DENSITY_RATIO;
/**
* 屏幕寬度比例
*/
private double WIDTH_RATIO;
/**
* 屏幕高度比例
*/
private double HEIGHT_RATIO;
/**
* 組件基準的寬度
*/
private double viewStandardWidth;
/**
* 組件基準的高度
*/
private double viewStandardHeight;
/**
* 組件基準的距離左邊的距離
*/
private double viewStandardMarginLeft;
/**
* 組件基準的距離頂部的距離
*/
private double viewStandardMarginTop;
/**
* 組件當前的寬
*/
private double viewCurrentWidth;
/**
* 組件當前的高
*/
private double viewCurrentHeight;
/**
* 組件當前距離左邊的距離
*/
private double viewCurrentMarginLeft;
/**
* 組件當前距離頂部的距離
*/
private double viewCurrentMarginTop;
/**
* UI組件的對象
*/
private View view;
/**
* 此View的父類布局的類型
*/
private int parentLayoutType;
/**
* 父類布局的類型為相對布局
*/
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;
/**
* 類對象實例化時,設置 基準屏幕寬度,高度
*
* @param context
* Context
* @param standardWidth
* 基準屏幕的寬
* @param standardHeight
* 基準屏幕的高
*/
public MyLayoutAdapter(Context context, double standardWidth,
double standardHeight)
{
this.context = context;
getScreenSize();
STANDARD_SCREEN_HEIGHT = standardHeight;
STANDARD_SCREEN_WIDTH = standardWidth;
// 計算寬高比率
WIDTH_RATIO = CURRENT_SCREEN_WIDTH / STANDARD_SCREEN_WIDTH;
HEIGHT_RATIO = CURRENT_SCREEN_HEIGHT / STANDARD_SCREEN_HEIGHT;
}
/**
* 獲取當前屏幕大小和密度
*/
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;
}
/**
* 進行通配
*
* @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();
}
}
/**
* 判斷布局屬性的值,設置布局的屬性
*/
private void setLayoutParams()
{
// 如果基準的寬是wrap_content或者fill_parent則使用原值,否則進行計算得到通配后的值
if (viewStandardWidth == LAYOUTPARAMS_WARP_CONTENT
|| viewStandardWidth == LAYOUTPARAMS_FILL_PARENT)
{
viewCurrentWidth = viewStandardWidth;
} else
{
viewCurrentWidth = viewStandardWidth * WIDTH_RATIO;
}
// 如果基準的寬是wrap_content或者fill_parent則使用原值,否則進行計算得到通配后的值
if (viewStandardHeight == LAYOUTPARAMS_WARP_CONTENT
|| viewStandardHeight == LAYOUTPARAMS_FILL_PARENT)
{
viewCurrentHeight = viewStandardHeight;
} else
{
viewCurrentHeight = viewStandardHeight * HEIGHT_RATIO;
}
}
/**
* 通過判斷此View父類的布局類型,給此View設置布局
*/
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);
}
}
/**
* 設置字體大小
*
* @param standardSize
* 原始大小
* @return int
*/
public int setTextSize(int standardSize)
{
int currentSize;
currentSize = (int) (standardSize * WIDTH_RATIO * DENSITY_RATIO);
return currentSize;
}
}

第三步,寫一個接口
復制代碼 代碼如下:

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);
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品欧美激情精品一区| 日本一本a高清免费不卡| 国产欧亚日韩视频| 国产精品毛片a∨一区二区三区|国| 国产高清在线不卡| 色噜噜久久综合伊人一本| 欧美成人精品在线视频| 亚洲3p在线观看| 久久亚洲成人精品| 欧美日韩在线观看视频小说| 色噜噜国产精品视频一区二区| 亚洲最大的免费| 在线看日韩欧美| 97人人爽人人喊人人模波多| 国产精品99导航| 国产精品人人做人人爽| 日韩欧美中文在线| 久久精品国产69国产精品亚洲| 8x拔播拔播x8国产精品| 欧美成人免费全部观看天天性色| 福利二区91精品bt7086| 欧美激情亚洲视频| 国内外成人免费激情在线视频网站| 欧美另类高清videos| 亚洲一区av在线播放| 日韩中文字幕亚洲| 97色在线观看免费视频| 欧美亚洲国产另类| 国产主播精品在线| 精品国产精品自拍| 性夜试看影院91社区| 国产一区二区三区在线观看网站| 日韩高清电影免费观看完整版| 成人av.网址在线网站| 精品亚洲男同gayvideo网站| 91亚洲国产精品| 日韩在线播放一区| 午夜精品久久久久久久99黑人| 国产精品久久婷婷六月丁香| 国产视频精品免费播放| 亚洲高清一二三区| 日韩欧美亚洲国产一区| 欧美性猛交xxxx免费看久久久| 亚洲国产福利在线| 国产一区二区三区三区在线观看| 2019国产精品自在线拍国产不卡| 成人乱色短篇合集| 91av免费观看91av精品在线| 这里只有精品在线播放| 日韩av在线影院| 高清一区二区三区四区五区| 欧美成在线观看| 亚洲精品日韩欧美| 性欧美激情精品| 亚洲韩国青草视频| 性欧美xxxx| 欧美夫妻性生活视频| 国产日本欧美一区| 亚洲精品xxx| 精品久久久中文| 日韩视频在线免费观看| 欧美午夜丰满在线18影院| 欧美性20hd另类| 亚洲男人天堂九九视频| 少妇高潮久久77777| 国产精品一区二区三区在线播放| 国产91ⅴ在线精品免费观看| 中文字幕日韩在线播放| 成人激情视频免费在线| 8090成年在线看片午夜| 久久综合免费视频影院| 亚洲成人av中文字幕| 亚洲视频国产视频| 国产精品久在线观看| 欧美高清无遮挡| 国产精品久久久久久久av电影| 91精品国产色综合久久不卡98| 国产精品综合网站| 最近2019年中文视频免费在线观看| 91精品久久久久久久| 69视频在线免费观看| 国产精品久久久久影院日本| 一区二区三区久久精品| 日韩在线观看免费网站| 26uuu国产精品视频| 国产在线98福利播放视频| 欧美在线一级va免费观看| 欧美日韩一区免费| 欧美中文字幕第一页| 国产亚洲成av人片在线观看桃| 黄色成人在线免费| 精品国产乱码久久久久久婷婷| 丝袜一区二区三区| 国产福利精品视频| 亚洲精品97久久| 亚洲影视九九影院在线观看| 成人激情视频在线| 国产69久久精品成人看| 亚洲xxxx视频| 亚洲女人被黑人巨大进入| 久久天天躁狠狠躁夜夜躁2014| 国产不卡av在线| 国产美女被下药99| 狠狠综合久久av一区二区小说| 欧美最猛性xxxx| 欧美激情中文字幕在线| 国色天香2019中文字幕在线观看| 国产精品成人品| 国产亚洲欧美日韩美女| 91免费福利视频| 色诱女教师一区二区三区| 欧美亚洲成人免费| 欧美一级成年大片在线观看| 一区二区三区回区在观看免费视频| 蜜月aⅴ免费一区二区三区| 日韩在线观看免费全集电视剧网站| www.亚洲人.com| 久久久综合av| 久久久精品国产一区二区| 国产一区二区三区在线免费观看| 青草青草久热精品视频在线网站| 日韩在线一区二区三区免费视频| 久久久免费观看视频| 国产一区欧美二区三区| 91av福利视频| 成人激情春色网| 欧美猛男性生活免费| 69久久夜色精品国产7777| 欧亚精品中文字幕| 久久精品99久久久久久久久| 九九久久国产精品| 久久av红桃一区二区小说| 国产精品色悠悠| 亚洲美女av在线播放| 精品欧美一区二区三区| 久久久久久久久亚洲| 北条麻妃一区二区三区中文字幕| 国产一区二区av| 国产成人精品av在线| 国产女同一区二区| 久久久久久com| 国内精品久久久久久中文字幕| 中国日韩欧美久久久久久久久| 欧美在线免费观看| 国产精品永久免费视频| 欧美猛交ⅹxxx乱大交视频| 91啪国产在线| 精品福利樱桃av导航| 日韩欧美在线国产| 九色成人免费视频| 欧美不卡视频一区发布| 欧美日韩国产123| 欧美又大又硬又粗bbbbb| 日本一本a高清免费不卡| 6080yy精品一区二区三区| 欧美另类在线观看| 亚洲欧美在线磁力| 欧美日韩一二三四五区| 成人欧美一区二区三区在线| 日韩欧美一区二区三区| 欧美黄色片在线观看| 国内精品久久久久久| 中文在线资源观看视频网站免费不卡| 成人免费激情视频|