如何对齐适配器中的文本/图像?

时间:2014-10-16 15:37:25

标签: android layout adapter

我一直在玩这个游戏,但我似乎无法让它发挥作用。我想尽可能将图标移动到屏幕的最右边,但我找不到如何操作。通常,像这样的东西会起作用,但由于某些原因它不会。我认为这与显示多行xml的适配器有关,而不仅仅是一行。

rowlayout.xml

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

<TextView
    android:id="@+id/label"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="20px" >
</TextView>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:text="Loaded"
    android:textSize="20px" >
</TextView>

<ImageView
    android:id="@+id/icon"
    android:layout_width="22px"
    android:layout_height="22px"
    android:layout_marginLeft="4px"
    android:layout_marginRight="10px"
    android:layout_marginTop="4px"
    android:layout_gravity="right"
     >
</ImageView>

 </LinearLayout>

MainActivity:

   @Override
   protected void onCreate(Bundle savedInstanceState) {

   String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
    MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this, values);
    setListAdapter(adapter);

}

MySimpleArrayAdapter:

 public class MySimpleArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;

public MySimpleArrayAdapter(Context context, String[] values) {
    super(context, R.layout.rowlayout, values);
    this.context = context;
    this.values = values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    textView.setText(values[position]);
    String s = values[position];
    if (s.startsWith("iPhone")) {
        imageView.setImageResource(R.drawable.yes);
    } else {
        imageView.setImageResource(R.drawable.no);
    }

    return rowView;
    }
 }

感谢您提供的任何帮助

编辑:woops,通过图标我的意思是图像

2 个答案:

答案 0 :(得分: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="wrap_content">

<TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Label"
    android:textSize="20sp" />

<ImageView
    android:id="@+id/icon"
    android:layout_width="22dp"
    android:layout_height="22dp"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_toLeftOf="@id/icon"
    android:layout_toRightOf="@id/label"
    android:text="Loaded"
    android:textSize="20sp" />
</RelativeLayout>

请注意,绝不应将px用作任何尺寸。相反,使用dp作为宽度,高度,边距或填充等大小,并始终使用sp作为文本大小!!!

另外,为了获得更好的性能,请查看ListView适配器的ViewHolder模式。这是指适配器的getView()方法中的代码。

这有帮助吗?

答案 1 :(得分:0)

你必须使用RelativeLayout而不是LinearLayout

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" >
<TextView
    android:id="@+id/label"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="20px"/>

<TextView
android:id="@+id/load"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
          android:layout_below="@id/label"
    android:text="Loaded"
    android:textSize="20px" />

<ImageView
    android:id="@+id/icon"
    android:layout_width="22px"
    android:layout_height="22px"
          android:layout_below="@id/label"
    android:layout_marginTop="4px"
    android:layout_alignParentRight="true" 
     />
    </RelativeLayout>