1

在 XML 中,我有一个自定义列表项视图,我在我的适配器的 getView() 方法中为我的 ListView 扩展它。在 XML 中,我怎样才能让我的自定义 ListView 项目总是屏幕宽度的一半(也许也添加一些填充)?我认为添加另一个小部件不会像我看到的建议解决方案那样工作,因为这是一个列表项。

编辑:

澄清一下,我不认为这是我的 xml 代码的问题,但这就是我的意思。如果我有这样的自定义布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1.0"
    android:paddingTop="10dp" 
    >

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="218dp"
        android:layout_height="212dp"
        android:layout_gravity="right"
        android:adjustViewBounds="true"

        android:scaleType="fitCenter"
        android:src="@drawable/..." />

</LinearLayout>

我有一个硬编码的宽度(我认为这不是最佳做法),所以我想让该宽度为屏幕总宽度的 1/2。显然,此 XML 已大大简化,但我希望它能解决问题。

如果我遗漏了一些相当明显的东西,我深表歉意。

编辑

添加另一个具有相同功能的布局可以解决此问题。

编辑2:没关系。我注意到以下行为:如果我添加另一个布局,它会膨胀所有内容,因此我会为每个列表项获得一半的空白空间宽度。我必须将最顶部的布局设置为我猜的屏幕宽度的一半。我该如何处理?

4

3 回答 3

2

主要的.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >
    </LinearLayout>
</LinearLayout>

项目列表.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="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

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

MainActivity.java

public class MainActivity extends Activity {

 static final String TAG_NAME = "name";
 static final String TAG_ID = "id";
 static String selected = "";

ListView listView;


HashMap<String, String> map;
ArrayList<HashMap<String,String>> myList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myList = new ArrayList<HashMap<String,String>>();       
    listView = (ListView) findViewById(R.id.listView1);
    fillListView();
}

private void fillListView() {

    myList.clear();

    map = new HashMap<String, String>();
    map.put(TAG_ID,"1");
    map.put(TAG_NAME, "Name1");
    myList.add(map);

    map = new HashMap<String, String>();
    map.put(TAG_ID,"2");
    map.put(TAG_NAME, "Name2");
    myList.add(map);

    map = new HashMap<String, String>();
    map.put(TAG_ID,"3");
    map.put(TAG_NAME, "Name3");
    myList.add(map);

    map = new HashMap<String, String>();
    map.put(TAG_ID,"4");
    map.put(TAG_NAME, "Name4");
    myList.add(map);

    listView.setAdapter(new MyListAdapter(this, R.layout.itemlist, myList));

}
private class MyListAdapter extends BaseAdapter 
{

    private List<HashMap<String,String>> List;
    private LayoutInflater mInflater;
    private int layoutresource;

    public MyListAdapter(Context context,int resource,List<HashMap<String, String>> myList) {
        List = myList;
        mInflater = LayoutInflater.from(context);
        layoutresource = resource;
    }

    @Override
    public int getCount() {
        return List.size();
    }

    @Override
    public Object getItem(int position) {
        return List.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = mInflater.inflate(layoutresource,null);
        }    

         final View rootView = convertView.findViewById(R.id.root);

        ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);
        final TextView name = (TextView) convertView.findViewById(R.id.textView1);

        imageView.setImageDrawable(getResources().getDrawable(R.drawable.profile));
        name.setTextColor(Color.parseColor("#ffffff"));
        name.setText(List.get(position).get(TAG_NAME));

        if ( List.get(position).get(TAG_ID).equals(selected))
            name.setTextColor(Color.parseColor("#ff0000"));
        else
            name.setTextColor(Color.parseColor("#ffffff"));


        rootView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                selected = List.get(position).get(TAG_ID);
                fillListView();
            }
        });

        name.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                rootView.performClick();
            }
        });

        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                rootView.performClick();
            }
        });

        return convertView;
    }
}

}

于 2013-02-27T04:40:29.710 回答
1

简化

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/LinearLayout1"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="horizontal"
          android:paddingTop="10dp">
<ImageView
        android:id="@+id/item_image"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="212dp"
        android:layout_gravity="right"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:background="#FFFFFF"
        android:src="@drawable/ic_launcher" />
<View android:layout_height="0dp"
      android:layout_width="0dp"
      android:layout_weight="1"/>
</LinearLayout>
于 2013-02-27T05:11:06.880 回答
0

您的列表项中只有一个视图(图像视图)。所以您应该将列表视图的宽度减半而不是列表项。但是如果您真的想将列表项的宽度减半,请尝试以下代码,希望对您有所帮助.

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="10"
    android:gravity="center"
    android:paddingTop="10dp" 
    >

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="0dp"
        android:layout_weight="5"
        android:layout_height="212dp"
        android:adjustViewBounds="true"

        android:scaleType="fitCenter"
        android:src="@drawable/..." />

</LinearLayout>
于 2013-02-27T04:54:54.850 回答