I did some quick experiments. Let me know if this is what you are looking for...
At the top of the widget are 2 buttons in a scrollview, size_hint_min and size_hint_max are used to control the size of the button "min max". I don't think this is what you are looking for.
Under the ScrollView is a BoxLayout, the width of the first button is controlled dynamically, based on the width of the scrollview. Is this what you wanted?
from kivy.app import App
from kivy.lang import Builder
kv = """
BoxLayout:
orientation: 'vertical'
BoxLayout: # this box layout shows how size_hint min and max can limit a widget size...
size_hint_y: None
height: dp(48)
Button:
text: 'min max'
size_hint_max_x: 400
size_hint_min_x: 100
Button:
text: 'size_hint 1'
Label:
text: 'Scroll Dynamic Button'
ScrollView:
id: sv
do_scroll_y: False
BoxLayout:
id: scroll_box
size_hint: None, None
size: self.minimum_width, dp(48)
Button:
text: 'Dynamic Button'
size_hint_x: None
width: dp(200) if sv.width <= dp(400) else sv.width - dp(200) # dynamically control the width
Button:
size_hint_x: None
width: dp(600)
text: 'Fixed Long Button'
"""
class ScrollXDynamicApp(App):
def build(self):
return Builder.load_string(kv)
ScrollXDynamicApp().run()