web-dev-qa-db-fra.com

Comment changer la couleur et la police sur ListView

J'essaie de changer ma police (couleur et taille) et l'arrière-plan de mon ListView. Je veux le changer avec des lignes de code non sur xml . Ma vue en liste ressemble à: le xml:

 <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:padding="10dp"
Android:textSize="18sp" Android:text="@string/hello">
</TextView>

et mon code est

public class NewsActivity  extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

 // ArrayAdapter listItemAdapter = new ArrayAdapter( this,Android.R.layout.simple_list_item_1, v_itemList );

      setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,ynetList));

      View v=getListView() ;

      ListView lv = getListView();

et ensuite? donnez-moi s'il vous plaît une base d'exemple sur mon code

20

Vous devez créer un CustomListAdapter. 

public class CustomListAdapter extends ArrayAdapter <String> {

    private Context mContext;
    private int id;
    private List <String>items ;

    public CustomListAdapter(Context context, int textViewResourceId , List<String> list ) 
    {
        super(context, textViewResourceId, list);           
        mContext = context;
        id = textViewResourceId;
        items = list ;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent)
    {
        View mView = v ;
        if(mView == null){
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mView = vi.inflate(id, null);
        }

        TextView text = (TextView) mView.findViewById(R.id.textView);

        if(items.get(position) != null )
        {
            text.setTextColor(Color.WHITE);
            text.setText(items.get(position));
            text.setBackgroundColor(Color.RED); 
            int color = Color.argb( 200, 255, 64, 64 );
                text.setBackgroundColor( color );

        }

        return mView;
    }

}

L'élément de liste ressemble à ceci (custom_list.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">
<TextView  
    Android:layout_width="fill_parent" 
    Android:layout_height="wrap_content" 
    Android:id="@+id/textView"
    Android:textSize="20px" Android:paddingTop="10dip" Android:paddingBottom="10dip"/>
</LinearLayout>

Utilisez les api TextView pour décorer votre texte à votre goût

et vous allez l'utiliser comme ça 

listAdapter = new CustomListAdapter(YourActivity.this , R.layout.custom_list , mList);
mListView.setAdapter(listAdapter);
30
Reno

Créez un CustomAdapter et dans lequel vous avez la méthode getView (). Par conséquent, si vous souhaitez modifier la couleur d'arrière-plan de listview, utilisez ceci: 

v.setBackgroundColor(Color.CYAN);

Si vous voulez changer le textColor alors faites ceci:

tv.setTextColor(Color.RED);

et pour le textSize: 

tv.setTextSize(20);

où 'v' est la listview et 'tv' la textview

7
Lavanya

Mieux encore, vous n'avez pas besoin de créer une mise en page Android xml distincte pour l'affichage des cellules de liste. Vous pouvez simplement utiliser "Android.R.layout.simple_list_item_1" si la liste ne contient que textview.

private class ExampleAdapter extends ArrayAdapter<String>{

    public ExampleAdapter(Context context, int textViewResourceId, String[] objects) {
        super(context, textViewResourceId, objects);
    }

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


        View view =  super.getView(position, convertView, parent);

        TextView tv = (TextView) view.findViewById(Android.R.id.text1);
        tv.setTextColor(0);

        return view;
    }
3
Lei Zhang

Si vous souhaitez utiliser une couleur de colors.xml , testez :

   public View getView(int position, View convertView, ViewGroup parent) {
        ... 
        View rowView = inflater.inflate(this.rowLayoutID, parent, false);
        rowView.setBackgroundColor(rowView.getResources().getColor(R.color.my_bg_color));
        TextView title = (TextView) rowView.findViewById(R.id.txtRowTitle);
        title.setTextColor(
            rowView.getResources().getColor(R.color.my_title_color));
        ...
     }

Vous pouvez aussi utiliser:

private static final int bgColor = 0xAAAAFFFF;
public View getView(int position, View convertView, ViewGroup parent) {
        ... 
        View rowView = inflater.inflate(this.rowLayoutID, parent, false);
            rowView.setBackgroundColor(bgColor);
...
}
1

Si vous voulez définir l’arrière-plan de la liste, placez l’image avant la <Textview>

< ImageView
Android:background="@drawable/image_name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>

et si vous voulez changer de couleur, mettez le code de couleur ci-dessus comme dans la zone de texte.

 Android:textColor="#ffffff"
1
Newts

Si vous avez juste besoin de changer certains paramètres de la vue et le comportement par défaut de ArrayAdapter, c'est OK pour vous:

 import Android.content.Context;
 import Android.view.View;
 import Android.view.ViewGroup;
 import Android.widget.ArrayAdapter;

 public class CustomArrayAdapter<T> extends ArrayAdapter<T> {

    public CustomArrayAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);

            // Here all your customization on the View
            view.setBackgroundColor(.......);
            ...

        return view;
    }


 }
1
Miguel Rivero

Vous pouvez sélectionner un enfant comme

TextView tv = (TextView)lv.getChildAt(0);
tv.setTextColor(Color.RED);
tv.setTextSize(12);    
0
blessenm

dans Android 6.0, vous pouvez changer la couleur du texte comme ci-dessous

holder._linear_text_active_release_pass.setBackgroundColor(ContextCompat.getColor(context, R.color.green));
0
koteswara D K

utilisez-les en code Java comme ceci:

 color = getResources().getColor(R.color.mycolor);

La méthode getResources() renvoie la classe ResourceManager pour l'activité en cours et getColor() demande au gestionnaire de rechercher une couleur en fonction d'un ID de ressource

0
Swap925215