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
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);
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
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;
}
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);
...
}
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"
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;
}
}
Vous pouvez sélectionner un enfant comme
TextView tv = (TextView)lv.getChildAt(0);
tv.setTextColor(Color.RED);
tv.setTextSize(12);
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));
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