Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:处理多屏幕的图像大小_Android_Image_Screen_Image Size - Fatal编程技术网

Android:处理多屏幕的图像大小

Android:处理多屏幕的图像大小,android,image,screen,image-size,Android,Image,Screen,Image Size,我发现用Android处理图像非常困难,我认为这是Android开发中最困难的部分 1) 我有一个图像,我希望它是我的应用程序的背景,所以我这样做 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

我发现用Android处理图像非常困难,我认为这是Android开发中最困难的部分

1) 我有一个图像,我希望它是我的应用程序的背景,所以我这样做

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" 
    android:background="@drawable/accueil">
</RelativeLayout>

背景应该填满整个屏幕,但不是cas。一些(小)屏幕上只显示部分背景。我怎么能说:我希望图像填满整个屏幕,即使图像比屏幕大,那么图像应该缩小,这样我就能看到所有的背景

也许我应该把我的背景放进去,而不是用它作为背景

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity">


       <ImageView
           android:id="@+id/imageView1"
           android:layout_width="500dp"
           android:layout_height="500dp"
           android:adjustViewBounds="false"
           android:src="@drawable/accueil" />

</RelativeLayout>

然而,在一些设备中,图像有点被裁剪

2) 我必须将一个布局放置在另一个布局中,但我希望它的位置精确,宽度相对于父布局。但如果我这样做了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/fond">

 <LinearLayout
     android:layout_width="300dp"
     android:layout_height="350dp"
     android:layout_marginTop="20dp"
     android:background="@drawable/fondshare"
     android:orientation="vertical" >

你可以看到结果不是我所期望的 (线性布局为带笑脸和所有按钮的矩形)

我认为如果您想使用位图作为背景,有几种解决方法:

  • 为不同的设备设计不同尺寸的图像。(可绘制hdpi、可绘制xhdpi…)
  • 使用不同的布局,并将它们放入使用限定符的不同资源包中。(布局-sw600dp…)

  • 我建议您调整每个布局文件夹和可绘图文件夹上的布局

    布局 布局图-800x480 布局用地 等。请参阅此处

    或参考此链接


    Android使用两个通用属性对设备屏幕进行分类:大小和密度。您应该期望您的应用程序将安装在屏幕大小和密度都在范围内的设备上。因此,您应该包含一些可供选择的资源,以针对不同的屏幕大小和密度优化应用程序的外观。有四种通用尺寸:小尺寸、普通尺寸、大尺寸和四种通用密度:低密度(ldpi)、中等密度(mdpi)、高密度(hdpi)、超高密度(xhdpi)

    要声明要用于不同屏幕的不同布局和位图,必须将这些替代资源放在单独的目录中,类似于对不同语言字符串所做的操作

    还要注意,屏幕方向(横向或纵向)被视为屏幕大小的变化,因此许多应用程序应该修改布局,以优化每个方向的用户体验

    有关更多信息,请参阅文章。

    尝试以下方法:

    在我的布局设计中,我遇到了很多问题。最后我得到了一个如下的解决方案

    我已经为不同的屏幕创建了布局文件夹,比如小屏幕和大屏幕。 原始布局文件夹xml文件仅适用于HVGA的正常布局 因此,使用name=layout small为小布局创建文件夹,并放置xml文件 在这里 然后使用foldername=layout long为大型布局amd xml创建文件夹
    要完成此任务,最好的方法是使用线性布局和

     <LinearLayout
     android:layout_width="300dp"
     android:layout_height="350dp"
     android:layout_marginTop="20dp"
     android:weightSum="3"
     android:background="@drawable/fondshare"
     android:orientation="vertical" >
    
      <View
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />
    
      </LinearLayout>
    
    
    
    在上述情况下

    android:weightSum=“要在布局中划分的部分数量”

    android:layout\u weight=“1”

    视图占用的总部分。假设线性布局的权重和为3,则视图覆盖的部分将为

    视野宽度

    (布局\宽度/重量总和)*重量

    视野高度

    (布局\高度/重量总和)*重量

    在您的情况下,视图最终高度为=119dp


    最后的宽度是=100dp,我最近不得不做类似的事情。这里有一些技巧

    如果要保留图像的纵横比, 在相对布局中使用此选项。 注意:相对布局的布局宽度和高度应为匹配父级或填充父级

    <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
    
            android:id="@+id/bgloginpage"
    
            android:scaleType="centerCrop" />
    
    使用它如下

    ImageView v = (ImageView)findViewById(R.id.bgloginpagew);
      v.setImageBitmap(ReturnBackGroundImage.decodeSampledBitmapFromResource(getResources(),R.drawable.mainbgforapp,0,0,true,walkThroughActivity.this));
    
    这是android网站上示例的修改版本

    如果有人需要保存不同大小的图像的比率,它就是

  • xxxhdpi/xxhdpi=4/3
  • xxxhdpi/xhdpi=2/1
  • xxhdpi/hdpi=2/1
  • xhdpi/mdpi=2/1
  • afaik这些比率仅对方形图像有效。
    我想我会像我一样为一些需要它们的人发布它。

    您是否使用相同的图像为不同的布局提供了不同的输出?抱歉,我不理解您的评论?我已经更改了评论,您能理解吗?谢谢。现在,对于所有屏幕分辨率,我只有一个图像,只有这个布局使用这个图像。我不认为我必须为每个分辨率(小、中、大)放置一张图像,因为我的图像应该加宽以匹配边框。我认为您将使用9张用于Android的补丁图像。我不认为这是正确的解决方案,我的图像应该适合所有屏幕,并在必要时加宽,而不是裁剪。为什么?我认为图像必须考虑屏幕的所有宽度/高度,因为它是背景。我不应该改变我的形象,是吗?你应该。根据需要的大小和分辨率,将图像放在不同的可绘制文件夹中(这意味着根据不同的可绘制文件夹调整图像的大小)。虽然你是根据屏幕的宽度和高度。Android还将调整不同设备所需的图像分辨率,并选择所需的可绘制文件夹。确定。例如,我创建了一个文件夹布局正常,我有这个图像(见我的主要文章中的imageview1),它不会填充边框!无论我用什么比例,它都是裁剪过的或太大了。。。我能做什么?假设您有imageview1,您必须将imageview1放在每个可绘制文件夹中,例如:如果要将imageview1放在可绘制mdpi中,则其大小必须为50x50像素,对于可绘制hdpi,则其大小必须为75x75像素……等等。因此,当您在特定设备上运行应用程序时,它会寻找一个与分辨率或密度匹配的可绘制文件夹。布局文件夹也一样。但即使我
    ImageView v = (ImageView)findViewById(R.id.bgloginpagew);
      v.setImageBitmap(ReturnBackGroundImage.decodeSampledBitmapFromResource(getResources(),R.drawable.mainbgforapp,0,0,true,walkThroughActivity.this));