如何将TextView添加到自定义LinearLayout视图?

时间:2015-11-09 15:27:46

标签: android android-layout android-custom-view

我创建了一个扩展LinearLayout的自定义视图。我通过以下服务将它们添加到屏幕上:

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(view, mParams);

这适用于只有背景颜色的简单空视图。但现在我想添加TextViews,我尝试这个:

TextView tv = new TextView(this);
tv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
tv.setText("Test text");
view.addView(tv);

然而TextViews没有显示。我错过了什么?

编辑:我注意到如果我在自定义视图中删除了这个覆盖方法,就会绘制TextView:

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(getDesiredWidth(), getDesiredHeight());
    }

但是,我需要该行来正确设置我想要的视图大小。

1 个答案:

答案 0 :(得分:1)

我个人在通货膨胀路线上走下坡路,因为过去曾因编程方式添加观点而头痛。这是a quick example of a custom view从LinearLayout扩展而来的,从XML布局文件中扩展,使用公共方法设置嵌入式textview的值。

关键是:

private TextView embeddedTextView;

..

private void init() {

    LayoutInflater.from(getContext()).inflate(
            R.layout.linear_layout_with_textview_layout, this);

    embeddedTextView = (TextView) findViewById(R.id.embedded_text_view);

}

public void setEmbeddedTextViewText(String text) {

    embeddedTextView.setText(text);
}

我采用这种方法,因为您在XML中交换不同样式的布局并使用相同的自定义视图;适当的代码重用性。从长远来看,工作量减少了。

修改:此处a way of hiding the textview by default, or an empty string ""