如何防止我的snackbar文本在Android上被截断?

pkbketx9  于 2023-02-17  发布在  Android
关注(0)|答案(6)|浏览(189)

我正在显示一个snackbar与一个相当长的短信和手机在人像模式下看起来很好。

但在平板电脑上,它似乎只允许1行文本,所以它得到省略

无论如何,我可以让它在平板电脑景观2行?

gajydyqb

gajydyqb1#

重要的是,您需要使用Snackbar的观点,这一点在其他答案中没有说明。
因此:

Snackbar snackbar = Snackbar.make(rootView, R.string.message, Snackbar.LENGTH_LONG);
View snackbarView = snackbar.getView();
TextView snackTextView = (TextView) snackbarView.findViewById(com.google.android.material.R.id.snackbar_text);

snackTextView.setMaxLines(2);
snackbar.show();

注:这也可能有助于屏幕密度较低的设备。

P. S如果您没有使用AndroidX(推荐使用),并且仍在使用传统支持库,请使用android.support.design.R.id.snackbar_text而不是com.google.android.material.R.id.snackbar_text来获取Snackbar的内部TextView。

piztneat

piztneat2#

您可以像这样引用SnackBar的TextView:

TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);

然后通过更改最大行数对TextView本身进行操作:

tv.setMaxLines(3)
9udxz4iz

9udxz4iz3#

基于Snackbar source code,您可以看到在宽度大于或等于600 dp的设备上,它们将最大行数更改为1

<integer name="design_snackbar_text_max_lines">3</integer>

res\values\*.xml值中

qkf9rpyu

qkf9rpyu4#

下面是一个更详细、更全面的上下文示例:

// Create on click listener
final  OnClickListener positiveButtonClickListener = new OnClickListener()
{
  @Override
  public void onClick(View v)
  {
    // Do your action - e.g. call GooglePlay  to update app
    openGooglePlayAppUpdate();
  }
};

// Create snack bar instance
Snackbar sBar = Snackbar.make(findViewById(R.id.some_view_to_bind),  // You bind here e.g. layout, or form view
                              R.string.snack_bar_message,
                              Snackbar.LENGTH_INDEFINITE)
                        // Set text and action to the snack bar
                        .setAction(android.R.string.ok, positiveButtonClickListener);

// Now get text view of your snack bar ...
TextView snckBarTv = (TextView) offerUpdate.getView().findViewById(android.support.design.R.id.snackbar_text);
snckBarTv.setMaxLines(5); // ... and set max lines
sBar.show(); // and finally display snack bar !
bcs8qyzn

bcs8qyzn5#

对于使用Kotlin的用户,您可以使用扩展

fun Snackbar.setMaxLines(lines: Int): Snackbar = apply { 
    view.findViewById<TextView>(com.google.android.material.R.id.snackbar_text).maxLines = lines
}
juzqafwq

juzqafwq6#

对我来说,最好的解决方案是在2行内自动调整大小:

<style name="ThemeOverlay.MyApp.SnackBar.Text" parent="@style/Widget.MaterialComponents.Snackbar.TextView" >
    <item name="autoSizeStepGranularity">0.5dp</item>
    <item name="autoSizeMaxTextSize">16dp</item>
    <item name="autoSizeMinTextSize">10dp</item>
    <item name="autoSizeTextType">uniform</item>
</style>

您还可以增加最大行数或更改任何其他TextView属性:

<style name="ThemeOverlay.MyApp.SnackBar.Text" parent="@style/Widget.MaterialComponents.Snackbar.TextView" >
    <item name="android:maxLines">3</item>
</style>

并自定义按钮和填充:

<style name="ThemeOverlay.MyApp.SnackBar.Button" parent="@style/Widget.MaterialComponents.Button.TextButton.Snackbar" >
    <item name="android:paddingStart">16dp</item>
    <item name="android:paddingEnd">16dp</item>
    <item name="android:textSize">14dp</item>  
    <item name="android:textAllCaps">false</item>     
    <item name="android:letterSpacing">0.0</item> 
</style>

<style name="ThemeOverlay.MyApp.SnackBar" parent="@style/Widget.MaterialComponents.Snackbar" >
    <item name="android:paddingStart">8dp</item>
    <item name="android:paddingEnd">8dp</item>
</style>

您的主题:

<style name="Theme.MyApp" parent="@style/Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="snackbarStyle">@style/ThemeOverlay.MyApp.SnackBar</item>       
    <item name="snackbarButtonStyle">@style/ThemeOverlay.MyApp.SnackBar.Button</item>
    <item name="snackbarTextViewStyle">@style/ThemeOverlay.MyApp.SnackBar.Text</item>
</style>

相关问题