4 votes

Comment envelopper du texte en utilisant simple_list_item_multiple_choice ?

J'utilise un SimpleCursorAdapter pour afficher un seul CheckedTextView . Je sais que la meilleure façon de le faire est d'utiliser simple_list_item_multiple_choice y android.R.id.text1 .

adapter = new SimpleCursorAdapter(getApplicationContext(), 
              android.R.layout.simple_list_item_multiple_choice, rules, 
              new String[]{Constants.KEY_RULE}, new int[]{android.R.id.text1});

Si le texte de KEY_RULE est supérieure à deux lignes, Android ne l'enroule pas, mais la cache. Existe-t-il un moyen simple de contourner ce problème sans avoir à implémenter mon propre adaptateur ?

Retrouvez mon code xml ci-dessous :

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <TextView android:id="@+id/header" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="@string/rule_selection_for_revision_list_title"
        android:padding="4dip" android:background="#000000" android:textColor="#ffffff" android:textStyle="bold" />

  <ListView
    android:id="@android:id/list"
     android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_weight="1.0" />

    <TextView android:textSize="18sp" android:textStyle="bold"
        android:id="@id/android:empty" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:gravity="center_vertical|center_horizontal"
        android:text="There are no rules to consider." />

</LinearLayout>

Y a-t-il un moyen de réduire la taille de la police pour qu'elle tienne sur deux lignes ?

2voto

inazaruk Points 37760

Il existe plusieurs options.

Vous pouvez définir votre mise en page personnalisée pour les éléments de la liste. Cela vous permet de personnaliser entièrement l'interface utilisateur de vos éléments. Vous trouverez plus de détails dans Tutoriel sur la vue en liste .

L'autre approche peut être utilisée si vous souhaitez toujours utiliser la mise en page standard des éléments, mais en ne fixant qu'un seul élément. petit chose en elle. Vous pouvez étendre Adapter et modifier la vue dans getView fonction. Voici un exemple :

class MySimpleCursorAdapter extends SimpleCursorAdapter
{
    public MySimpleCursorAdapter(Context ctx, int layout, 
                                 Cursor cursor, String [] from, int [] to)
    {
        super(ctx, layout, cursor, from, to);
    }

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

        TextView textView = (TextView)view.findViewById(android.R.id.text1);

        //You can increase number of lines in the text view
        textView.setMaxLines(5);

        LayoutParams params = textView.getLayoutParams();
        if(params.height > 0)
        {
            int height = params.height;
            params.height = LayoutParams.WRAP_CONTENT;                              
            textView.setLayoutParams(params);
            textView.setMinHeight(height);
        }

        //Or you can make your font smaller
        textView.setTextSize(customTextSize);

        //or whatever you like, even apply new custom style
        //...

        return view;
    }   

}

Vous devriez probablement opter pour la première approche (mise en page personnalisée), mais parfois la deuxième approche est également réalisable.

0voto

Flo Points 13170

Vous n'avez pas besoin d'implémenter un adaptateur personnalisé. Il suffit de définir une mise en page personnalisée pour les éléments de la liste et de la transmettre à l'adaptateur au lieu de android.R.layout.simple_list_item_multiple_choice .

Vous pouvez rechercher dans les sources d'Android (fournies avec le SDK sur votre ordinateur) à quoi ressemble la disposition originale de simple_list_item_multiple_choice et l'adapter à vos besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X