阅读这篇文章(http://developer.android.com/guide/practices/screens_support.html)后,我在 xml 文件中使用 dp 单元开发了一个完整的应用程序。但是,当我在不同的屏幕上测试应用程序时,布局不是太大就是太小。
我认为 dp 单元会为我解决这个问题。为什么没有呢?我不想使用重量属性,因为一切都已经完成。
一个xml布局:
<ImageView
android:layout_width="match_parent"
android:layout_height="140dp"
android:src="@drawable/logo3"
android:scaleType="centerCrop"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/select_level"
android:textColor="#4cb122"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:textSize="20dp"
android:layout_marginTop="20dp"
/>
<Button
android:background="@drawable/red_button"
android:layout_width="200dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="25dp"
android:text="@string/easy"
android:textSize="15dp"
android:onClick="playEasy"
style="custom_button"
/>
<Button
android:background="@drawable/green_button"
android:layout_width="200dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="@string/medium"
android:textSize="15dp"
android:onClick="playMedium"
style="custom_button"
/>
<Button
android:background="@drawable/blue_button"
android:layout_width="200dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:textSize="15dp"
android:text="@string/unbeatable"
android:onClick="playUnbeatable"
style="custom_button"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginTop="113dp"
android:textSize="15dp"
android:textColor="@color/secondTextColor"
android:text="@string/developed_by"
/>
我能做什么?谢谢!
最佳答案
对维度使用 dp 并不是真正适合所有问题的解决方案。
请注意,您应该尽可能使用布局权重,通常一个 dp 值应该适用于所有屏幕尺寸。然而,有时你会遇到导致问题的边缘情况,你只需要做一些事情让它工作(例如,我必须使用这种技术在所有屏幕尺寸的 TabLayout 中正确定位标签上的徽章).
我要做的是为每个支持的屏幕尺寸放置一个 dimens.xml 文件:
res/values-small/dimens.xml
res/values-normal/dimens.xml
res/values-large/dimens.xml
res/values-xlarge/dimens.xml
如果需要,您也可以使用其他限定符来定位平板电脑,see here for a guide to configuration qualifier names .
然后,为每个文件中的每个屏幕尺寸限定符指定每个尺寸(请注意,这只需要为在非常大或非常小的屏幕上导致问题的尺寸值完成)。
例如在 res/values-large/dimens.xml 中你可能有这个:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_view_height">140dp</dimen>
</resources>
然后在 res/values-small/dimens.xml 中,您可能会使用它来使其适合较小的屏幕:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_view_height">96dp</dimen>
</resources>
然后,在您的布局中,使用 @dimen/your_dimens_id 引用它,框架将选择适合设备屏幕尺寸的正确尺寸:
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/image_view_height"
android:src="@drawable/logo3"
android:scaleType="centerCrop"
/>
关于android - dp 单位不缩放布局在不同的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245131/
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(
在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:
有没有办法在sinatra的beforedoblock中停止执行并返回不同的值?beforedo#codeishere#Iwouldliketo'return"Message"'#Iwouldlike"/home"tonotgetcalled.end//restofthecodeget'/home'doend 最佳答案 beforedohalt401,{'Content-Type'=>'text/plain'},'Message!'end如果你愿意,你可以只指定状态,这里有状态、标题和正文的例子
我想用sunspot重现以下原始solr查询q=exact_term_text:fooORterm_textv:foo*ORalternate_text:bar*但我无法通过标准的太阳黑子界面理解这是否可能以及如何实现,因为看起来:fulltext方法似乎不接受多个文本/搜索字段参数我不知道将什么参数作为第一个参数传递给fulltext,就好像我通过了"foo"或"bar"结果不匹配如果我传递一个空参数,我得到一个q=*:*范围过滤器(例如with(:term).starting_with('foo*')(顾名思义)作为过滤器查询应用,因此不参与评分。似乎可以手动编写字符串(或者可能使
我从ui中得到日期范围为-approved_between"=>"2013-03-17-2013-03-18"我需要拆分此approved_start_date="2013-03-17"和approved_end_date="2013-03-18"...我希望使用它在mysql中查询,因为mysql中的日期格式是created_at:2012-07-2810:35:01.我正在做的是:approved=approved_between.split("")approved_start_date=approved[0]approved_end_date=approved[2]很确定这不是处