Android 自定义文本视图上的边距

Android 自定义文本视图上的边距,android,textview,margin,Android,Textview,Margin,我检查了很多答案,但到目前为止没有一个有用 我试图扩展android的TextView,并在代码中设置这个自定义视图的边距,因为我将在按钮按下和类似的事情上实例化它们。它将添加到线性布局中。这就是我得到的: public class ResultsView extends TextView { public ResultsView(Context context) { super(context); LinearLayout.LayoutParams la

我检查了很多答案,但到目前为止没有一个有用

我试图扩展android的TextView,并在代码中设置这个自定义视图的边距,因为我将在按钮按下和类似的事情上实例化它们。它将添加到线性布局中。这就是我得到的:

public class ResultsView extends TextView {
    public ResultsView(Context context) {
        super(context);
        LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layout.setMargins(15, 15, 15, 15);
        setLayoutParams(layout);
    }
}
任何地方都没有边际的迹象


编辑:我可能想添加,如果我在xml中指定了一个边距值,它就可以工作。

您现在需要将此视图添加到当前显示的布局中。你错过了下一步。 所以现在你需要这样的东西:

    currentlayout.addview(View);

我认为问题在于,当您尝试添加边距时,layoutparams尚未设置,为什么不尝试在ResultsView类中重写此方法:

       protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            MarginLayoutParams margins = MarginLayoutParams.class.cast(getLayoutParams());
            int margin = 15;
            margins.topMargin = margin;
            margins.bottomMargin = margin;
            margins.leftMargin = margin;
            margins.rightMargin = margin;
            setLayoutParams(margins);
        };
然后删除构造函数中的代码,这样可以应用边距,直到我们确定视图有布局对象为止,希望这有帮助


问候

它是用XML添加的。我可以在线性布局中看到文本视图,但它们没有边距。耶!真的做到了,谢谢!事实上,我以前也尝试过类似的方法,但使用了onFinishInflate,但没有效果。你知道这在性能方面有多好吗?我是否应该添加一个布尔值来检查我们是否已经设置过一次?我认为这不会对性能造成太大的影响,但是如果您对此感到担忧,您可以添加一个标志来执行一次,如果您愿意的话……我想您可能只需要修改传递到onLayout()中的维度就可以了(例如,左+=左边距,右-=右边距,上+=上边距,下-=下边距,超级)。OnlyLayout(已更改,左,上,右,下));不适用于LinearLayout。可能是因为您从未调用过超级。onLayout@MartinCazares嗨,我得到的利润为零…有什么建议吗?