Question: When I developed, I found a new widget called `android.support.v7.widget.ButtonBarLayout` unexpectedly. I tried to search it on the internet, but nothing was found, even on the official development documents site. 

In the meantime, I found two `ButtonBarLayout` when I search `ButtonBarLayout` everywhere in **Android Studio**, one is `android.support.v7.widget.ButtonBarLayout` and the other is `com.android.internal.widget.ButtonBarLayout`. I tried to read source codes of both, I found that they are the same except package name. So I thought maybe `android.support.v7.widget.ButtonBarLayout` came from `com.android.internal.widget.ButtonBarLayout` after the **internal `ButtonBarLayout`** was through tests and released. At the same time, `ButtonBarLayout` is inherited from `LinearLayout`.

But there are some question:

* What can we get from `ButtonBarLayout` literally and how should we use it?
* I noticed the variable of `private boolean mAllowStacking`. When it changes, orientation of this layout would be changed. But I didn't really understand what it is used for.

So does somebody know `ButtonBarLayout` well?

P.S.: I used **Android Studio** of **2.0.0 Preview 4** and **Gradle Plugin** of **2.0.0-alpha3** and **Android Support Library** of **23.1.1** and **Platform-tools** of **23.1** and **Build-tools** of **23.0.2**.

Answer: 
You are right first of all. `ButtonBar` layout does not seem to be featured anywhere in the official Android documentation. I tried myself to search about it, but to no avail. However I have found some information which defines what is a `ButtonBar` layout and when to use it. Hopefully this will help you.

Most tutorials use the `Buttonbar` layout in a dialogbox or at the bottom of a screen to confirm or decline an option. The image below is a visual representation of how the `ButtonBar` layout has been used in a screen.

[![enter image description here](https://i.stack.imgur.com/MPMJ8.png)](https://i.stack.imgur.com/MPMJ8.png) 

The screenshot above has the following layout xml:

```
<LinearLayout
    style="?android:attr/buttonBarStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/Button01"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Show" />

    <Button
        android:id="@+id/Button02"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Change" />
</LinearLayout>

<EditText
    android:id="@+id/myView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10" >

    <requestFocus />
</EditText>

```

So essentially what Android is doing here is simply creating two buttons next to each other in a `LinearLayout` with each button having the match\_parent parameter set to the width. Hence each button takes half the size of the screen. Android have actually taken away the hassle of creating seperate buttons and positioning them correctly to fit different screens, by creating a simple widget handling this altogether.

As with the support library, Android have implemented this for developers using an earlier API. It is normal for them to use the support library for this purpose.

Hope this helps :)
Just to add to the other answers, if you guys want to check the orientation of a `ButtonBarLayout` you should check the orienation AFTER the value has called on measure.

In other words (Kotlin):

```
buttonBarLayout.post {
    val orientation = buttonBarLayout.orientation
    val height = buttonBarLayout.measuredHeight
}

```