- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章android 分辨率适配的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
以前在公司做项目的时候,遇到了分辨率的适配问题,说起来当时挺纠结的,因为没有外网,所以这个问题,都是黑暗中摸索的,尝试了许多方法,最后和徒弟们一起搞出了这个方法,具体行不行,先和大家分享下,这个方法不能说万能的,但是最起码它解决了分辨率跟密集度的关系,但是也引来一个问题,就是布局会因为图片资源小而失真,所以这也需要美工的同志多多配合的,废话不说,贴代码: 第一步,先创建一个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); } 。
最后此篇关于android 分辨率适配的方法的文章就讲到这里了,如果你想了解更多关于android 分辨率适配的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 JavaFX 开发视频播放器。我正在将视频从本地文件系统加载到 JavaFX 类媒体中。然后我想获取宽度和高度,以便我可以将场景的尺寸设置为该大小: Media media = new M
我是OpenCV的新手,正在尝试解决这个问题。我有一个.mp4文件保存在从网络摄像头流式传输的磁盘上。现在,我需要制作视频的低分辨率版本,以上传到Web服务器(这个想法是,低分辨率预览实时或多或少地上
我在我的应用程序中使用 jfree 图表(折线图)...创建时我的图表看起来很模糊...我怎样才能获得高清晰度图像。 我使用过:ChartUtilities.writeScaledChartAsPNG
我正在用 Java 编写一个工具来处理我网站上上传的文件。我想以特定的方式管理图像:如果尺寸大于限制,我想首先调整图像的尺寸,然后再次检查尺寸。当然,我不想做无用的工作,所以我想在调整图像大小之前估计
是否有一种纯 WPF 方法来获取有关所有可用显示器大小(分辨率)的信息。我知道我可以使用 Screen.AllScreens 来获取它们,但在我的遗留项目中我无法添加新的引用(内置 WPF 程序集除外
看了Developer文档,部分理解了LDPI,HDPI,MDPI,XHDPI类比,网上到处找也没有找到具体答案。 我有两部手机,一部是小屏幕,一部是平板电脑。我希望我的小屏幕手机上的按钮看起来很小,
对于下面给定的网页, xyz {% load staticfiles %} html, body {
我在 Mac 上使用多个 JFrames 制作了一个程序,分辨率还可以,一切都适合屏幕。但是,当我在我的 PC 上运行该程序时,JFrames 太大并且会立即离开屏幕。 我的问题是:是否可以在 JFr
我需要有关如何检索屏幕分辨率的帮助,如下图所示。 我找到了 this documentation这真的很有帮助。这是我根据这些文档尝试的代码: int numberOfScreens = GetSys
有什么方法可以更改分辨率或为亚马逊 Kindle 键盘上的屏幕设置不同的边界?我的屏幕有一部分出现裂纹,我想解决这个问题。 我试过在文件系统中乱搞(通过 WiFi 连接),但我的所有属性更改都没有任何
快速提问, 我正在开发 libgdx 中的游戏,但遇到了问题。我正在尝试扩展我的 Assets ,我正在使用 Gdx.graphics.getDensity() 来获取密度,然后使用它作为乘数来设置我
我有一些关于屏幕分辨率的问题,我不清楚。这些问题假设我的应用程序将在 iOS 4.0 及更高版本以及 iPhone 3GS 或 iPhone 4 上运行。 启动图像 (default.png) 的大小
我们有一个应用程序在审核过程中被 Apple 应用程序审核人员拒绝。拒绝的原因是应用程序在 Ipad 上运行时无法正确缩放。 该应用程序本来就不是要在 Ipad 上运行的,但与他们争论这一点似乎没有意
我试图在不解码文件的情况下获取 JPEG 图像的分辨率。我从互联网上获得了几个样本,但没有一个可以正常工作。似乎是这样,因为许多 JPEG 文件不是标准的,尽管任何图形应用程序(Irfan、PSP、F
我尝试了很多事情,但是所有尝试都失败了。 我需要将灰度图像(2560x1440)调整为更低或更高的分辨率,然后我需要将边界设置为原始大小(2560x1440),但将调整后的图像保持在中心。 我使用的是
我正在使用 GLSulfaceView 开发一个静音相机应用程序,该应用程序从预览中捕获图片。 为了捕捉图片,我使用 GLES20.glReadPixels(0, 0, surfaceWidth, s
是否有相当于 yarn resolutions 的 npm功能? npm package.json docs 中没有提及它. 例如,我想在 3.3.2 上安装 lerna@3.3.2 及其依赖项之一
我制作了一个在 Arduino 上运行的 24x15 LED 显示屏,去年我在内存中放入了 32KB 的图形例程,这很酷。 但现在我已经升级到 Arduino Mega,具有 256KB 内存,并且有
我的场景是,我正在收集网络数据包,如果数据包与网络过滤器匹配,我想记录连续数据包之间的时间差,最后一部分是不起作用的部分。我的问题是,无论我使用什么 C 定时器函数,我都无法获得准确的亚秒级测量。我尝
我们一直在学校布置一项任务,需要更改图像(反转颜色、切换颜色、旋转 90 度、双倍大小、放大图像),现在我正在尝试通过将分辨率加倍来使其大小加倍,但无法弄清楚如何访问该地址并更改它。我们得到了两个函数
我是一名优秀的程序员,十分优秀!