web-dev-qa-db-fra.com

définir par programmation la marge / le remplissage de la vue de texte dans une vue de liste

Ceci fait partie de main_alllatestnews.xml

<LinearLayout
    Android:id="@+id/layout_content"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@id/layout_menu"
    Android:layout_below="@id/layout_title"
    Android:orientation="vertical" >
    <ListView
        Android:id="@Android:id/list"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

C'est plein de main_alllatestnewslist.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/layout_temp"
Android:layout_width="fill_parent"
Android:layout_height="100px"
Android:background="@drawable/background_news_list" >

<ImageView
    Android:id="@+id/image_alllatestnewstitle"
    Android:layout_width="134px"
    Android:layout_height="80px"
    Android:layout_marginBottom="5px"
    Android:layout_marginLeft="10px"
    Android:layout_marginRight="10px"
    Android:layout_marginTop="5px"
    Android:scaleType="centerCrop" />

<LinearLayout
    Android:id="@+id/test"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/text_particularlatestnewstitle"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:textColor="#000000"
        Android:textSize="25px" />

    <RelativeLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="25px" >

        <TextView
            Android:id="@+id/text_newsdate"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:textColor="#999999"
            Android:textSize="15px" />

        <TextView
            Android:id="@+id/text_newscategorytitle"
            Android:layout_width="50px"
            Android:layout_height="wrap_content"
            Android:layout_alignParentRight="true"
            Android:layout_gravity="right"
            Android:gravity="right"
            Android:textColor="#ff0000"
            Android:textSize="15px" />
    </RelativeLayout>
</LinearLayout>

Ceci fait partie de main_alllatestnews.Java

LayoutInflater liInflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    linear.addView(liInflater
            .inflate(R.layout.main_alllatestnewslist, null));
lv = (ListView) findViewById(Android.R.id.list);
for (int i = 0; i < webservice.news.size(); i++) {
    maintitle = (TextView) findViewById(R.id.text_particularlatestnewstitle);
    LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)maintitle.getLayoutParams(); 
    layoutParams.setMargins(50, 0, 0, 0);       <-- method one

    maintitle.setPadding(50, 0, 0, 0);          <-- method two
    maintitle.setLayoutParams(layoutParams);

    int margin = 100;                           <-- method three
    ((MarginLayoutParams) maintitle.getLayoutParams()).leftMargin = margin;
}
SimpleAdapter adapter = new SimpleAdapter(this, fillMaps,
            R.layout.main_alllatestnewslist, from, to);
    lv.setAdapter(adapter);

Comme vous pouvez le voir, j'ai utilisé TROIS méthodes pour définir la marge/le remplissage de textview dans une listview mais pas en cas de succès.

J'utilise xml textview au lieu d'en créer de nouveaux.

Je veux définir manuellement parce que j'ai reçu if/else instruction car il n'a pas été publié.

Je ne sais absolument pas comment le configurer en Java.

Veuillez me donner une idée qui fonctionne, merci

((MarginLayoutParams) maintitle.getLayoutParams()).leftMargin = margin;
20
Alan Lai

maintitle.setPadding(50, 0, 0, 0); (méthode 2) devrait fonctionner.

Je pense que le problème est que, bien que vous apportiez beaucoup de modifications au TextView, à la fin, vous gonfliez à nouveau une nouvelle disposition dans:

SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, 
            R.layout.main_alllatestnewslist, from, to);

faites donc un adaptateur personnalisé, puis gonflez et personnalisez votre TextView dans la getView().

34
C. Leung

Attention, (int) pixels! = Dp

public int dp2px(int dp) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
4
Santiago Battaglino

Essayez le code suivant, cela fonctionne pour moi.

textView.setX (40);

Ma solution est pour le SDK 14 et supérieur. Pas dans ListView mais RecyclerView.

3
Chong Chern Dong