Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: calling setPadding() on a view doesn't work when I also set the layoutParams on the view

If I call setPadding() on a view, I can successfully set the padding, however, if I first set the layoutParams and then the padding, or set the padding and then set the layoutParams, the padding is not applied.

Demonstration:

    //This doesn't work
    textView.setLayoutParams(linearLayoutParams);
    textView.setPadding(0, 100, 0 , 0);

    //This doesn't work either
    testView.setPadding(0, 100, 0 , 0);
    textView.setLayoutParams(linearLayoutParams);

    //This does work
    textView.setPadding(0, 100, 0 , 0);

Does anyone know how to use setLayoutParams() and setPadding() at the same time, or why setLayoutParams() is stopping setPadding() from working?

Edit: More detail:

I call this method in onCreate()

public void initTextView(){

Textview textView = (TextView) findViewById(R.id.textView); 


LinearLayout.LayoutParams  linearLayoutParams = new LinearLayout.LayoutParams(myWidth, myHeight);


textView.setLayoutParams(linearLayoutParams);

//This doesn't work
textView.setPadding(0, 100 ,0 , 0);

}

but if I comment out this line from above:

// textView.setLayoutParams(linearLayoutParams);

Then the setPadding() method does work.

Thanks in advance.

like image 229
Micah Simmons Avatar asked Nov 04 '15 13:11

Micah Simmons


People also ask

How do you add padding to a view?

Use the setPadding(left, top, right, bottom) method on the view to set the padding.

Which XML attribute can be used to put a view in front of other views?

bringToFront()” method will let you a perfect indicator view :) Also, there is another option to use a parent-children relationship views.

What is Android padding?

The padding is expressed in pixels for the left, top, right and bottom parts of the view. Padding can be used to offset the content of the view by a specific number of pixels. For instance, a left padding of 2 will push the view's content by 2 pixels to the right of the left edge.

What is view in Android with example?

View is a basic building block of UI (User Interface) in android. A view is a small rectangular box that responds to user inputs. Eg: EditText, Button, CheckBox, etc. ViewGroup is an invisible container of other views (child views) and other ViewGroup.


1 Answers

I don't believe there's anything wrong with the code, rather just not understanding what it's doing.... if your myHeight value is smaller than the padding, you're just simply not going to notice the effect.

In the attached series of screenshots, the first screenshot is the default TextView containing a price (it has no layout params other than what's set in xml).

In the 2nd screenshot I set the textview to the following (height=30, top padding = 100:

LinearLayout.LayoutParams  linearLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 30);
textview.setLayoutParams(linearLayoutParams);
textview.setPadding(0, 100, 0, 0);

The text is there, the top padding is there, but it's all forced to "crop" to the set height of 30 (note I also lost all my original xml parameters (gravity, margins, etc) because setting LayoutParams cancels all of that and only applies whatever I set in those LayoutParams).

In the 3rd screenshot I set the textview to the following (height=150, top padding = 100:

LinearLayout.LayoutParams  linearLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 150);
textview.setLayoutParams(linearLayoutParams);
textview.setPadding(0, 100, 0, 0);

Voila! Since I've given the view ample height, it can fully display the text and the top padding (though again, I lost all my xml parameters).. If you go back to your source, try it out: replace myHeight with some fixed value (try at least 150) and see if things display as they should.

enter image description here

like image 124
mjp66 Avatar answered Oct 11 '22 01:10

mjp66