简体   繁体   中英

How to add TextView to custom LinearLayout view?

I created a custom view that extends LinearLayout. I'm adding them to the screen through a Service like this:

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

This works for a simple empty view with just a background color. But now I want to add TextViews, and I'm trying this:

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);

However the TextViews aren't showing. What am I missing?

EDIT: I just noticed that the TextView is drawn if I remove this overrided method on the custom view:

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

However, I need that line to properly set the size I want for the views.

I'd personsally go down the inflation route, as have had headaches in the past caused by programmatically adding views. Here's a quick example of a custom view that's extended from LinearLayout, inflated from an XML layout file, with a public method for setting the value of the embedded textview.

The key bit is this:

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);
}

I take this approach as you swap out different styled layouts in XML and use the same Custom View; proper code re-usability. Less work in the long-run.

Edit: Here's a way of hiding the textview by default, or an empty string "" .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM