Android - how to align list view items to be nicely spaced left and right align?

假装没事ソ 提交于 2019-12-02 04:25:17

问题


I am trying to add an image to my ListView to make it look more like a button. I would like the images to be a little smaller, maybe 60% of current. And the images to lign up nicely on the right in a column. Here is a screen of what I currently have:

and here is my list view 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> 

any idea what I am doing incorrectly?

The ListView that contains this TextView is defined like this:


One note, the way I create and work with my Lists is with the ListAdapter, using code like this:

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);

Thanks!


回答1:


With the comment and advice that Frank Sposaro gave, you will be able to position your views correctly.

For your next problem, I advice you to make your own adapter similar to this:

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;
    }

In your onCreate:

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

Another example for a ListView with an Adapter can be found here




回答2:


Ahh. You are doing the correct thing using a compound drawable. Not sure if there is a better way to maybe have the spacing in your compound drawable expand, but I know this'll work.

<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>

Basically just pointing out using the align parent right and left. You may want to add some margins or padding to them. Also make sure to vertically center your elements.



来源:https://stackoverflow.com/questions/11533819/android-how-to-align-list-view-items-to-be-nicely-spaced-left-and-right-align

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!