我在这里的应用程序中遇到了一个与此问题相关的问题。看看你是否可以帮助我:
在我的情况下,我有一个显示标尺的ImageView,然后我需要以实际尺寸显示此规则,其中不需要增长或缩小屏幕尺寸或密度。使用我的Moto G3作为基础,它完美地工作,但是当testo其他设备时,它会失去标尺的实际尺寸,因为图像试图适合屏幕尺寸。
标尺的图像为PNG,尺寸为3600像素x 155像素,最大测量值为30厘米,位于LinearLayout orizontal内。在我的Moto G3可见区域,它在10厘米,一个更大的屏幕,例如它应该显示更大的标尺区域(例如11到15厘米),但它在屏幕的视野中只有10厘米,显示它随着设备的显示设置和密度而增长和缩小。
在我为每个资源(xxhdpi,xhdpi等)拍摄RAGUA之前,我决定将其迁移到Android的assets文件夹,但仍然遇到同样的问题。
你对如何修复它有所了解吗?
遵循以下代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/rulerPolegada"
android:layout_width="1780dp"
android:layout_height="103dp"
android:layout_marginTop="-10dp"
android:layout_marginLeft="@dimen/left_ruler"
/>
</RelativeLayout>
</HorizontalScrollView>
</LinearLayout>
正如我所说,在我为资产成像之后,我开始在java中设置它:
rulerPolegada = (ImageView) view.findViewById(R.id.rulerPolegada);
rulerPolegada.setImageDrawable(Controller.getImageAssets(getActivity(), "ruler_polegada.png"));
答案 0 :(得分:1)
由于Understanding Density Independence In Android,您可以按如下方式计算这些值
以下是您可以如何计算您的设备(Moto G3)
通过这些步骤,您可以计算出图像的大小。
现在,不是为不同的屏幕密度提供不同的标尺图像,而是将高质量的图像放在drawable-anydpi文件夹中,因为A drawable in res/drawable-anydpi/ also is valid for any screen density. However, in this case, the -anydpi variant trumps any density-specific variant.
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// these will return the actual dpi horizontally and vertically
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;
不幸的是,您无法直接在布局xml文件中使用计算值 - 需要在Java代码中动态更改ImageView大小。
以上解决方案应该为您提供体面准确性(可能会有10%的差异),但您可以将DensityMetrics与默认显示结合使用以获得实际的水平和垂直密度,这将有助于您计算图像像素大小更精确。
x
修改强>
计算480dp:
答案 1 :(得分:1)
我不确定你的答案是否正确,因为似乎以前的答案都不满意。我曾遇到同样的问题 - 我需要这个ImageView
在没有缩放的情况下在大量设备上具有相同的大小。我通过在dp
layout_width
和layout_height
$(".newadded").click(function () {
var array = $('#usernames').val().split(",");
$.each(array,function(i)
{
var a = (array[i]);
if(a !="")
{
$('#accordian .custSecCont').show();
uservar += "<option value='" + array[i] + "'>" + array[i] + "</option>";
}
});
});
中提供了定义的值来解决了我的问题
答案 2 :(得分:0)
您应该阅读此guide以便在多屏幕中运行