【问题标题】:android ListView Style and colors?android ListView 样式和颜色?
【发布时间】:2013-07-23 15:00:39
【问题描述】:

我从 selector.xml 项目样式(背景)设置我的列表视图时遇到问题

颜色没有切换它显示所有项目黑色,我想在黑色和白色之间切换项目颜色,现在的目标是从 listview 适配器切换项目颜色,但是当我从 listview 适配器切换项目颜色时,当我点击任何项目时项目背景变成蓝色!

这是我的代码

public class Home_ForumsList_listview extends ArrayAdapter<Object>{

    private int[] colors = new int[] { 0x30ffffff, 0x30808080 };
    Context context; 
    private LayoutInflater mInflater; 
    @SuppressWarnings("rawtypes")
    ArrayList ob; 
    int resource ;
    /*================================================
     *  Setup ListView
     *===============================================*/
    @SuppressWarnings("unchecked")
    public Home_ForumsList_listview (Context context, int resource, @SuppressWarnings("rawtypes") ArrayList objects) {
        super(context, resource,objects);
        this.context  = context;
        this.ob       = objects;
        this.resource = resource;
        mInflater     = LayoutInflater.from(context);
    }
    /*================================================
     *  Items Counter
     *===============================================*/
    public int getCount() {
        return ob.size();
    }
    /*================================================
     *  Item Posistion JSON
     *===============================================*/
    public JSONObject getItem(JSONObject position) {
        return position;
    }
    /*================================================
     *  Item Position
     *===============================================*/
    public long getItemId(int position) {
        return position;
    }
    /*================================================
     *  Hold Views inside Chant Bit View
     *===============================================*/
    static class ViewHolder {

        TextView  forum_title;
        TextView  forum_desc;
        TextView  forum_catagories;
        TextView  forumcode;
        Button    popup_but_id;
        RatingBar ratingsmall;
    }
    /*================================================
     *  Setup Each View raw by raw
     *===============================================*/
    public View getView(final int position, View convertView, ViewGroup parent)
    {
        final ViewHolder holder;
        JSONObject r = (JSONObject) getItem(position);

        if(convertView == null)
        {
             convertView = mInflater.inflate(R.layout.a_home_forumslist_bit, null);
             holder = new ViewHolder();
             convertView.setTag(holder);


             holder.forum_title      = (TextView)  convertView.findViewById(R.id.flist_forum_title);
             holder.forum_desc       = (TextView)  convertView.findViewById(R.id.flist_forum_desc);
             holder.forum_catagories = (TextView)  convertView.findViewById(R.id.flist_forum_catagories);
             holder.forumcode        = (TextView)  convertView.findViewById(R.id.flist_forumcode);
             holder.ratingsmall      = (RatingBar) convertView.findViewById(R.id.ratingsmall);
       }
       else
        {
             holder = (ViewHolder) convertView.getTag();
        }


        int colorPos = position % colors.length;
        convertView.setBackgroundColor(colors[colorPos]);

        try {
            holder.forum_title.setText(r.getString("forum_title"));

            if ( r.getString("forum_desc").equals(""))
            {
                holder.forum_desc.setVisibility(View.GONE);
            }

            float z = (float) r.getInt("rate");
            holder.ratingsmall.setRating(z); 
            holder.forum_desc.setText(r.getString("forum_desc"));
            holder.forumcode.setText( context.getString(R.string.forumcode) + " :   ( "+ r.getLong("forumcode") + " ) ");
            holder.forum_catagories.setText( " : " + r.getString("forum_catagories"));

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return convertView; 

    } 
}

我用谷歌搜索了如何设置 listview 的样式,所有显示相同颜色的示例都从 Adapter 切换,有没有办法从 selector.xml 设置 listview 项目的样式?

对不起我的英语不好^_^我希望你明白了

【问题讨论】:

    标签: android listview


    【解决方案1】:

    听起来您想在列表中交替使用背景颜色,因此第 0 项为白色,第 1 项为黑色,第 2 项为白色,依此类推。

    首先,将颜色定义为 Android 资源:

    res/colors.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="white">#ffffff</color>
        <color name="black">#000000</color>
    </resources>
    

    然后,使用这些资源标识符作为背景。现在,您将颜色十六进制作为 int 赋予它,这是错误的——它需要一个作为资源标识符的 int。像这样:

    private int[] colors = new int[] { R.color.white, R.color.black };
    

    应该可以。试试看。

    要摆脱蓝色突出显示,您可以制作选择器并使用它们来代替黑白:

    drawable/dark_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:color="@color/gray"
        android:pressed="true" />
    
    <item android:color="@color/black" />
    </selector>
    

    然后使用可绘制对象作为背景。

    private int[] colors = new int[] { 
        R.drawable.lightSelector, 
        R.drawable.darkSelector 
        };
    

    【讨论】:

      【解决方案2】:

      我有两个想法:

      可能你忘记设置ListView的cache color hint透明了,可以看到this answer

      android:cacheColorHint="@android:color/transparent"
      

      或者您可能需要将 ListView 上的 scrolling cache 设置为 false。

      android:scrollingCache="false"
      

      PD:如果您发布您的 XML 布局,这可能会很有用。

      【讨论】:

        【解决方案3】:

        如果您只想在 listView 中更改线条的颜色,您可以使用普通的 listView 和您选择的 BaseAdapter。

        看看吧:

        package com.example.joignabilite;
        
        import java.util.ArrayList;
        import java.util.List;
        
        import android.content.Context;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.view.ViewGroup;
        import android.widget.BaseAdapter;
        import android.widget.LinearLayout;
        import android.widget.TextView;
        
        public class ContactAdapter extends BaseAdapter {
        
            // Une liste de Contacts
            private List<Contact> mListP;
        
            // Le contexte dans lequel est présent notre adapter
            private Context mContext;
        
            // Un mécanisme pour gérer l'affichage graphique depuis un layout XML
            private LayoutInflater mInflater;
        
            private int white = 0xFFFFFFFF;
            private int grey = 0x33000000;
        
            public ContactAdapter(Context context, List<Contact> aListP) {
                mContext = context;
                mListP = aListP;
                mInflater = LayoutInflater.from(mContext);
            }
        
            public int getCount() {
                return mListP.size();
            }
        
            public Object getItem(int position) {
                return mListP.get(position);
            }
        
            public long getItemId(int position) {
                return position;
            }
        
            public View getView(int position, View convertView, ViewGroup parent) {
                LinearLayout layoutItem;
                // (1) : Réutilisation des layouts
                if (convertView == null) {
                    // Initialisation de notre item à partir du layout XML
                    // "Contact_layout.xml"
                    layoutItem = (LinearLayout) mInflater.inflate(
                            R.layout.item_contact, parent, false);
                } else {
                    layoutItem = (LinearLayout) convertView;
                }
        
                // (2) : Récupération des TextView de notre layout
                TextView tv_Nom = (TextView) layoutItem
                        .findViewById(R.id.repertoire_item);
        
                // (3) : Renseignement des valeurs
                tv_Nom.setText(mListP.get(position).nom);
        
                // On mémorise la position de la "Contact" dans le composant textview
                tv_Nom.setTag(position);
        
                /*
                 * Here is the way to change color using pair and unpair line
                 */
                if (position % 2 == 0)
                    layoutItem.setBackgroundColor(grey);
                else
                    layoutItem.setBackgroundColor(white);
        
                // On ajoute un listener
                tv_Nom.setOnClickListener(new OnClickListener() {
        
                    @Override
                    public void onClick(View v) {
                        // Lorsque l'on clique sur le nom, on récupère la position du
                        // "Contact"
                        Integer position = (Integer) v.getTag();
        
                        // On prévient les listeners qu'il y a eu un clic sur le
                        // TextView "TV_Nom".
                        sendListener(mListP.get(position), position);
        
                    }
        
                });
        
                // On retourne l'item créé.
                return layoutItem;
            }
        
            /**
             * Interface pour écouter les évènements sur le nom d'une Contact
             */
            public interface ContactAdapterListener {
                public void onClickNom(Contact item, int position);
            }
        
            // Contient la liste des listeners
            private ArrayList<ContactAdapterListener> mListListener = new ArrayList<ContactAdapterListener>();
        
            /**
             * Pour ajouter un listener sur notre adapter
             */
            public void addListener(ContactAdapterListener aListener) {
                mListListener.add(aListener);
            }
        
            private void sendListener(Contact item, int position) {
                for (int i = mListListener.size() - 1; i >= 0; i--) {
                    mListListener.get(i).onClickNom(item, position);
                }
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-10-01
          • 1970-01-01
          • 2021-12-18
          • 1970-01-01
          • 2020-05-04
          • 1970-01-01
          • 2013-09-24
          • 2015-06-03
          • 2011-05-30
          相关资源
          最近更新 更多