【问题标题】:Android: ImageView in Fragment (compatibility package): can't set width and height by codeAndroid:Fragment中的ImageView(兼容包):无法通过代码设置宽高
【发布时间】:2011-10-12 11:31:12
【问题描述】:

我正在为 android 2.3.3 平台开发一个应用程序并导入 Compatibility 包以使用 Fragment 类。 首先我无法在这里运行第一个简单的例子http://developer.android.com/guide/topics/fundamentals/fragments.html

应用程序在尝试膨胀片段时崩溃。

我“解决”了对片段内容进行硬编码而不是使用 xml 文件 - 我在 onCreateView 中创建了一个 ImageView:

public static class SampleFragment extends Fragment 
{
  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
   {        
     ImageView image = new ImageView(getActivity());
     image.setImageResource(R.drawable.sample_image);
     image.setLayoutParams(new FrameLayout.LayoutParams(120, 30, Gravity.CENTER));
     return image;
  }
}

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background">
<fragment 
    android:name="org.blackimp.ListenActivity$SampleFragment"
    android:id="@+id/noise_meter_fragment"
    android:layout_weight="0"           
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
...
</LinearLayout>

问题在于它完全忽略了代码设置的布局宽度和高度 - 实际代码在调用 setLayoutParams 之前将 dp 转换为 px。它扩展图像以填充整个片段宽度。

  1. 如何设置图像的宽度和高度 - 意思是缩放它 - ?
  2. 有没有办法通过使用兼容性包的 xml 膨胀和描述片段内容来使其工作 - 是的,我扩展了 FragmentActivity 但它无论如何都不起作用 - ?

谢谢

【问题讨论】:

    标签: android fragment


    【解决方案1】:

    这里你要了解片段的使用。您在 XML 中包含宽度设置为“fill_parent”的片段。在这种情况下,片段只返回 ImageView。就像您将 ImageView 直接放入您的布局中一样。您必须在片段的 XML 中设置像素信息,或者以编程方式添加片段。

    您可以找到更多关于缩放 ImageViews 的信息here

    【讨论】:

    • 谢谢:我使用了一个片段,因为随着应用程序的进行,我需要通过动画将其替换为不同的内容。将布局按片段划分也是一项要求:片段必须针对不同的分辨率进行拉伸,而图像应该在其中缩放。此外,如果我在 xml 布局文件中显式显示片段内的图像,图像总是放在片段的顶部,你指定我希望它在中心。
    • 如果你想缩放 ImageView,设置 android:scaleType="centerCrop" 选项很重要。您可以在更改片段的位置发布代码吗?然后我可以告诉你为了正确缩放图像你必须修复什么。
    • 我仍然没有更改片段。到目前为止,我只需解决通过代码为片段内的图像设置特定尺寸的问题:如果我不通过 OnCreateView 内的代码创建 ImageView 并且仅使用 xml,则应用程序将崩溃。如果我通过代码创建 ImageView,则无法设置与填充片段的大小不同的大小。我的想法是在片段边界和图像之间留出一些空间,通过 dp 以 px 转换明确设置图像尺寸。
    • 你试过在 onCreateView 中使用 image.setScaleType(ImageView.ScaleType.CENTER_CROP) 吗?
    • 我已经将我的图像放在一个 LinearLayout 中,现在我可以使用上面编写的相同代码来设置它的宽度和高度。顺便说一句,现在我无法在其片段内垂直居中显示图像。 xml 中的片段具有填充父级的宽度,同时将高度固定为 60dp。线性布局垂直和水平填充父级。图像重力设置为“中心”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多