Android 如何更改TextView的边距

Android 如何更改TextView的边距,android,Android,我已经以编程方式将TextView添加到LinearLayout中,并且在一些外部事件中,我希望将该TextView的底部边距减少到-10,为此我尝试了以下操作 LinearLayout.LayoutParams lastTxtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lastTxtParams.se

我已经以编程方式将TextView添加到LinearLayout中,并且在一些外部事件中,我希望将该TextView的底部边距减少到-10,为此我尝试了以下操作

LinearLayout.LayoutParams lastTxtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lastTxtParams.setMargins(0, 0, 0, -10);
mOldTextView.setLayoutParams(lastTxtParams);
mOldTextView.invalidate();
修改已添加到视图的小部件的边距是否正确?
设置TextView的内部页边距,而不是布局页边距。这就是你想做的吗?这两种不同的利润可能相当复杂

如果要设置布局边距,请更改TextView的LayoutParams(TextView.getLayoutParams(),然后更改返回的LayoutParams对象上的参数)

您不需要更改线性布局上的任何内容

问候,, 奥利弗

我这样做了,效果非常好。 也许当您在-ve中给出值时,这就是代码不起作用的原因。
您只需将此代码放在创建视图引用的位置。

TextView不支持设置页边距。说:

即使视图可以定义填充,它也不支持边距。但是,视图组提供了这样的支持。有关更多信息,请参阅ViewGroup和ViewGroup.MarginLayoutParams


xml中的布局可能已经有一个layout|u margin(Left | Right | etc)属性,这意味着您需要访问该xml生成的对象并对其进行修改

我发现这个解决方案非常简单:

ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) mTextView
        .getLayoutParams();

mlp.setMargins(adjustmentPxs, 0, 0, 0);

break;

获取textview的LayoutParams实例,将其向下转换为MarginLayoutParams,然后使用setMargins方法设置边距。

这是一个棘手的问题,我在表格布局的一行中将边距设置为textview。 见下文:

TableLayout tl = new TableLayout(this);
tl.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

TableRow tr = new TableRow(this);        
tr.setBackgroundResource(R.color.rowColor);

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(4, 4, 4, 4);

TextView tv = new TextView(this);
tv.setBackgroundResource(R.color.textviewColor);
tv.setText("hello");
tr.addView(tv, params);

TextView tv2 = new TextView(this);
tv2.setBackgroundResource(R.color.textviewColor);
tv2.setText("hi");
tr.addView(tv2, params);

tl.addView(tr);
setContentView(tl);
为在表行中使用LayoutParams导入所需的类为:

import android.widget.**TableRow**.LayoutParams;
需要注意的是,我为表行添加了类。类似地,许多其他类也可以使用LayoutParams,如:

import android.widget.**RelativeLayout**.LayoutParams;
导入android.widget.LinearLayout.LayoutParams


因此,请相应地使用。

您可能在绘制布局边距后更改了布局边距。mOldTextView.invalidate()是无用的。您需要在父级上调用requestLayout()以重新发布新配置。在绘图之前移动布局更改代码时,一切正常。

这里是另一种方法

当我遇到同样的问题时,我不喜欢这里建议的解决方案。 因此,我想出了另一种方法: 我在XML文件中的两个字段之间插入了一个TextView,我想用两个重要字段来分隔这两个字段:

  • 可见性设置为“消失”(不占用任何空间..)
  • 高度设置为我需要的任何间隔

    XML:
    ...//some view up here
    <TextView
        android:id="@+id/dialogSeparator"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:visibility="gone"/>
    ...//some view down here
    
    维奥拉…我得到了所需的保证金。 顺便说一句,此解决方案适用于垂直方向的线性布局,但您可以使用不同的布局

    希望这有帮助

            TextView tv = (TextView)findViewById(R.id.item_title));
            RelativeLayout.LayoutParams mRelativelp = (RelativeLayout.LayoutParams) tv
                        .getLayoutParams();
            mRelativelp.setMargins(DptoPxConvertion(15), 0, DptoPxConvertion (15), 0);
            tv.setLayoutParams(mRelativelp);
    
        private int DptoPxConvertion(int dpValue)
        {
           return (int)((dpValue * mContext.getResources().getDisplayMetrics().density) + 0.5);
        }
    
    textview的getLayoutParams()应基于xml中textview的父级强制转换为相应的参数

    <RelativeLayout>
       <TextView
        android:id="@+id/item_title">
    </RelativeLayout>
    
    
    

    要在不同的设备上呈现相同的实际大小,请使用我上面使用的DptoPxConvertion()方法。setMargin(左、上、右、下)参数将采用像素值而不是dp值。如需进一步参考,请参阅此

    此调用需要API级别19。@SanjayKumar-不,不存在要求API级别19的约束。此调用如何回答OP的问题?除了冗余的额外行设置touch listener,没有调用invalidate(),也没有在构造函数中显式声明LinearLayout.LayoutParams[LayoutParams.WRAP_CONTENT vs LinearLayout.LayoutParams.WRAP_CONTENT]的参数外,代码似乎是相同的?此外(这并不重要),OP要求在以编程方式创建的TextView上设置边距,尽管答案是通过findViewById()从布局xml获得TextView。我很好奇我在这里遗漏了什么…@Melquiades同意你的看法,因为它没有回答问题,所以被删除为选定答案,也正如答案
    中提到的,可能因为你在-ve中给出了值,所以边距可以是-ve值。这给了我ClassCastException:->ViewGroup.LayoutParams不能转换为ViewGroup.MarginLayoutParams
    
            TextView tv = (TextView)findViewById(R.id.item_title));
            RelativeLayout.LayoutParams mRelativelp = (RelativeLayout.LayoutParams) tv
                        .getLayoutParams();
            mRelativelp.setMargins(DptoPxConvertion(15), 0, DptoPxConvertion (15), 0);
            tv.setLayoutParams(mRelativelp);
    
        private int DptoPxConvertion(int dpValue)
        {
           return (int)((dpValue * mContext.getResources().getDisplayMetrics().density) + 0.5);
        }
    
    <RelativeLayout>
       <TextView
        android:id="@+id/item_title">
    </RelativeLayout>