While optimizing an app for material theme on lollipop, I'm encountering this annoying problem:
Whenever there is long text on dialog buttons, that doesn't fit the button bar width in total, the text isn't wrapped in multiple lines for those buttons as in previous themes. Instead the following buttons get squeezed out of the dialog, being unreachable (see image below).
Screenshot:
I've spent a lot of time on this problem so far and the only topic regarding it, that I could find on the internet is this: https://code.google.com/p/android/issues/detail?id=78302
So I'm taking the advice there and ask this question here..
What I've tried is looking into the source (buttons are defined with maxLines = 2) and changing different parameters on buttonBarStyle and buttonBarButtonStyle but with no success.
I'm looking for a simple style-solution and do not want to use third party libraries because of this.
May this only be an emulator problem? I don't think so.
Help is very much appreciated. Thanks in advance.
Edit: To follow up, see my own answer from Dec 3, which is not a solution.
This could be fixed with using stacked buttons instead of row buttons. Here my workaround how it could be achieved with using AppCompat lib :
Code import android.support.v7.app.AlertDialog;
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(context, R.style.StackedAlertDialogStyle);
builder.setTitle("Title");
builder.setMessage("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc dignissim purus eget gravida mollis. Integer in auctor turpis. Morbi auctor, diam eget vestibulum congue, quam arcu pulvinar dui, blandit egestas erat enim non ligula." +
" Nunc quis laoreet libero. Aliquam consectetur nibh eu arcu eleifend efficitur.");
builder.setPositiveButton("Positive Button", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNeutralButton("Neutral Button", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("Cancel Button", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
try{
final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
LinearLayout linearLayout = (LinearLayout) button.getParent();
linearLayout.setOrientation(LinearLayout.VERTICAL);
} catch(Exception ex){
//ignore it
}
Style
<style name="StackedAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="buttonBarButtonStyle">@style/StackedButtonBarButtonStyle</item>
</style>
<style name="StackedButtonBarButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
<item name="android:layout_gravity">right</item>
</style>
Result