【问题标题】:How to align ImageView in Listview (Android)如何在 Listview 中对齐 ImageView (Android)
【发布时间】:2013-02-11 21:26:27
【问题描述】:

我认为很快:

我无法让我的 listView 正确对齐嵌入的 ImageView。

如下所示,图片排列不正确(它们受到相邻 TextView 中文本数量的影响):

这是行项目的有问题的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:orientation="horizontal" 
android:gravity="left">


<ImageView
    android:id="@+id/flagIcon"
    android:layout_width="60sp"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_weight="0.05"
    android:src="@drawable/orange_flag"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:gravity="center_vertical"
    android:orientation="vertical" 
    >

    <TextView
        android:id="@+id/location_row_item_main_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"/>

    <TextView
        android:id="@+id/location_row_item_secondary_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" 
        android:textSize="12sp"/>

</LinearLayout>

<Button
    android:id="@+id/add_spec_button"
    android:layout_width="60sp"
    android:layout_height="60sp"
    android:layout_gravity="center_vertical"
    android:focusable="false"
    android:text="@string/location_add_spec"
    android:onClick="myClickHandler"/>

</LinearLayout>

有什么想法吗?谢谢。

【问题讨论】:

  • 尝试给 ImageView 和 LinearLayout 同等的权重,..
  • 不,恐怕不行。经过一番摆弄后,我认为这是因为 imageView 正在调整大小 - 我想知道有没有办法阻止这种情况..
  • remove android:layout_weight="0.05" 为什么需要这个?

标签: android xml layout imageview


【解决方案1】:

布局视图

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

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_play_live" />


    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_play_live" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_toRightOf="@+id/imageView1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

    </LinearLayout>

</RelativeLayout>

【讨论】:

    【解决方案2】:

    试试这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:orientation="horizontal" 
        android:gravity="left">
    
    
        <ImageView
            android:id="@+id/flagIcon"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:scaleType="centerInside"
            android:src="@drawable/orange_flag"/>
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_vertical|left"
            android:orientation="vertical" 
            >
    
            <TextView
                android:id="@+id/location_row_item_main_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="16sp"/>
    
            <TextView
                android:id="@+id/location_row_item_secondary_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TextView" 
                android:textSize="12sp"/>
    
        </LinearLayout>
    
        <Button
            android:id="@+id/add_spec_button"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:gravity="center"
            android:focusable="false"
            android:text="@string/location_add_spec"
            android:onClick="myClickHandler"/>
    
    </LinearLayout>
    

    主要问题是由中心垂直LinearLayout 的宽度引起的。 ImageView 的权重也没有用,它有一些在 RelativeLayout 中使用的属性。

    注意1:注意android:gravityandroid:layout_gravity之间的区别。

    注意 2:sp 大小单位用于文本大小。来自文档:

    一个 dp 是一个与密度无关的像素,对应于物理 160 dpi 时的像素大小。
    一个 sp 是相同的基本单位,但被缩放 由用户喜欢的文本大小(它是一个与比例无关的像素),所以 你应该在定义文本大小时使用这个度量单位(但是 从不用于布局尺寸)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      相关资源
      最近更新 更多