【问题标题】:Android - how to align list view items to be nicely spaced left and right align?Android - 如何对齐列表视图项目以很好地左右对齐?
【发布时间】:2012-07-18 03:18:59
【问题描述】:

我正在尝试将图像添加到我的 ListView 以使其看起来更像一个按钮。我希望图像更小一点,可能是当前图像的 60%。并且图像在列中很好地排列在右侧。这是我目前拥有的屏幕:

这是我的列表视图 xml:

<?xml version="1.0" encoding="utf-8"?>  

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp"    
    android:layout_width="match_parent"
    android:drawableRight="@drawable/arrow_button" 
     >
</TextView> 

知道我做错了什么吗?

包含此 TextView 的 ListView 定义如下:


请注意,我创建和使用列表的方式是使用 ListAdapter,使用如下代码:

Question q = new Question ();
q.setQuestion( "This is a test question and there are more than one" );

questions.add(q);

adapter = new ArrayAdapter<Question>( this, R.layout.questions_list, questions);

setListAdapter(adapter);

谢谢!

【问题讨论】:

  • 专业提示:Alt+PrtScr 对当前窗口进行截图。或者,由于您使用的是 Windows 7,请使用截图工具。

标签: android android-layout android-listview


【解决方案1】:

啊。您正在使用复合可绘制对象做正确的事情。不确定是否有更好的方法可以扩展复合可绘制对象中的间距,但我知道这会起作用。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

<TextView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:padding="10dp"
    android:textSize="16sp"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true" />

<View
    android:layout_height="64dip"
    android:layout_width="64dip"
    android:background="@drawable/arrow_button"
    android:layout_centerVertical="true"
    android:layout_alignParentRight="true" />

</RelativeLayout>

基本上只是使用 align parent right 和 left 来指出。您可能想要为它们添加一些边距或填充。还要确保将元素垂直居中。

【讨论】:

  • 谢谢,现在试试。您知道如何使图像显示为当前大小的 60% 左右吗?它们似乎有点太大了。
  • 实际上我在 xml 上遇到错误:未绑定前缀与 RelativeLayout :(
  • 那是因为 xmlns:android="schemas.android.com/apk/res/android" 应该已经上移了。我更新了它
  • 啊,是的,使用您的最新代码,编译正常。现在尝试运行它,看看它是怎么回事:)
  • 好吧。如果它有效,请投票并接受。我痛苦地把那个xml输入到eclipse中,然后复制粘贴,哈哈。想要确保所有属性名称都是正确的。
【解决方案2】:

借助 Frank Sposaro 的评论和建议,您将能够正确定位您的观点。

对于你的下一个问题,我建议你自己制作类似这样的适配器:

private class CustomAdapter extends ArrayAdapter<Question> {

        private LayoutInflater mInflater;

        public CustomAdapter(Context context) {
            super(context, R.layout.row);
            mInflater = LayoutInflater.from(context);
        }

        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.row, null);

                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.mTextView);
                holder.image = (ImageView) convertView.findViewById(R.id.mImage);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            //Fill the views in your row
            holder.text.setText(questions.get(position).getText());
            holder.image.setBackground... (questions.get(position).getImage()));

            return convertView;
        }
    }

    static class ViewHolder {
        TextView text;
        ImageView image;
    }

在您的 onCreate 中:

ListView mListView = (ListView) findViewById(R.id.mListView);
mListView.setAdapter(new CustomAdapter(getApplicationContext(), questions));

可以找到另一个带有适配器的 ListView 示例here

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多