web-dev-qa-db-ja.com

リストビューでテキストビューのマージン/パディングをプログラムで設定します

これは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>

これは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>

これは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);

ご覧のように、リストビューでtextviewのマージン/パディングを設定するために[〜#〜] three [〜#〜]メソッドを使用しましたが、成功しませんでした。

新規作成の代わりにxml textviewを使用しています。

手動で設定したいのは、if/elseステートメントがポストアウトされなかったためです。

Javaでそれを設定する方法はまったく考えられません。

実行可能なアイデアを教えてください、ありがとう

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

maintitle.setPadding(50, 0, 0, 0);(方法2)は動作するはずです。

問題は、TextViewに多くの変更を加えても、最後に次のように新しいレイアウトを再び膨らませることだと思います。

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

そのため、カスタムアダプタを作成し、getView()TextViewを膨らませてカスタマイズします。

34
C. Leung

注意、(int)ピクセル!= dp

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

次のコードを試してください、それは私のために動作します。

textView.setX(40);

私のソリューションはSDK 14以上です。 ListViewではなく、RecyclerView。

3