Unfortunately this requires accessing the underlying Java. The method is similar to Amro's approach here for a pushbutton
and utilizes the external findjobj
function:
h.t = uicontrol('style','text','string','foo','units','centimeters','position',[1 1 1 0.5]);
h.e = uicontrol('style','edit','string','foo','units','centimeters','position',[2 1 1 0.5]);
jh = findjobj(h.t);
jh.setVerticalAlignment(javax.swing.JLabel.CENTER)
Unfortunately, this is still off by a pixel or two:

I'd say just bump the text box by pixel, as necessary:
oldunits = get(h.t, 'Units');
set(h.t, 'Units', 'Pixels');
pos = get(h.t, 'Position');
pos(2) = pos(2) + 1;
set(h.t, 'Position', pos)
set(h.t, 'Units', oldunits)
Which gives us:

Edit: Modifying the BackgroundColor
property of the edit box has no effect (though setting it to none
makes it a black box...), and the box will remain the default color. Per The MathWorks, this is a design decision:
This is a expected behavior in the way that MATLAB displays the
BackgroundColor
for editable text objects.
This could also most likely be updated by leveraging the underlying Java, but I'm not familiar.