从右到左 SnackBar

Posted

技术标签:

【中文标题】从右到左 SnackBar【英文标题】:Right To Left SnackBar 【发布时间】:2016-05-17 01:29:02 【问题描述】:

我想在 Design Support Library SnackBar 上显示带有 动作文本。 我的语言是从右到左书写的。那么如何更改 SnackBar 文本和操作方向? 像这样的:

【问题讨论】:

【参考方案1】:

只有你需要:

         Snackbar snackbar=Snackbar.make(v, "آیا از حذف کامل این مورد مطمئن هستید؟", Snackbar.LENGTH_LONG)
                    .setAction("حذف", new View.OnClickListener() 
                        @Override
                        public void onClick(View v) 
                           //info@giran.ir
                           //09155336168
                        
                    );
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
                View snack = snackbar.getView();
                snack.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
            

            snackbar.show();

【讨论】:

【参考方案2】:

最后从答案和更多搜索中我找到了这个解决方案:

Snackbar snackbar =
    Snackbar.make(view, "My right2left text", Snackbar.LENGTH_LONG)
            .setAction("Action", new View.OnClickListener() 
                @Override
                public void onClick(View view) 
                
             );

将方向设置为从右到左:

ViewCompat.setLayoutDirection(snackbar.getView(),ViewCompat.LAYOUT_DIRECTION_RTL);

不要忘记显示小吃栏:

snackbar.show();

更新

由于您有TextAction 作为TextView,您可以为它们使用其他TextView 方法。比如setTypeface()setTextSize()等等。

为文本设置字体:

TextView text = snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
text.setTypeface(yourTypeface);

为动作设置字体:

TextView action = snackbar.getView().findViewById(android.support.design.R.id.snackbar_action);
action.setTypeface(yourTypeface);

【讨论】:

对 17 岁以下的 android 使用 android.support.v4.view.ViewCompat 中的 ViewCompat 如***.com/questions/30463608/…。 简单实用【参考方案3】:
private void showSnackbar(String text, int Length, String Action, View.OnClickListener clickListener) 
    Snackbar snackbar = Snackbar.make(findViewById(R.id.coordinatorLayout), text, Length);
    View snack = snackbar.getView();
    snackbar.getView().setRotationY(180);
    snack.setBackgroundColor(getResources().getColor(R.color.DarkBlue));
    TextView snack_text = (TextView)snack.findViewById(android.support.design.R.id.snackbar_text);
    TextView snack_action = (TextView)snack.findViewById(android.support.design.R.id.snackbar_action);
    snack_text.setTypeface(tf);
    snack_action.setTypeface(tf);
    snack_action.setRotationY(180);
    snack_text.setRotationY(180);
    snackbar.setAction(Action, clickListener);
    snackbar.setActionTextColor(Color.parseColor("#00c4ff"));
    snackbar.show();

【讨论】:

请解释您的代码如何以及为什么解决问题,因为 *** 不接受纯代码的答案。此外,您可以解释为什么您的答案超过了以前的旧答案(主要是已接受的答案)。【参考方案4】:

只需添加此代码:

在应用程序标签下的Android清单中保留此

android:supportsRtl="true"

还有这个:

Snackbar snackbar = Snackbar.make(getView(), "Text", Snackbar.LENGTH_SHORT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
    TextView view1 = (TextView)snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
    view1.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);


snackbar.show();

【讨论】:

好的,但是当您想为您的应用程序使用 RTL 方向时,它很有用。在某些情况下,您希望对应用使用 LTR 方向,对某些小部件使用 RTL。【参考方案5】:

我通过根据这个参考为小吃布局设置自定义布局解决了这个问题。

customize snackBar's layout

【讨论】:

【参考方案6】:

您必须根据本地进行设置。 Android 支持此功能。

从 Android API Level 17+ 开始,它原生支持 RTL。要强制您的整个布局为 RTL,包括 ActionBar,请执行以下操作。

在应用程序标签下的Android清单中保留此

android:supportsRtl="true"

在 Utils 类中定义这样的方法

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static void getRtlSupport() 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
      
 

将此 repo 用作参考并将其用于小吃店

https://github.com/semsamot/ActionBarRTLizer.git

【讨论】:

谢谢,那么 API 级别 17- 呢?我的应用最小 SDK 为 14。 这不是最佳做法。避免 RTL 语言爱好者在 Android 应用程序开发中发生奇怪事情的更好方法是创建自定义 RTL 布局并在应用程序的每个位置进行扩展,例如具有自定义 RTL 布局的工具栏在每个 API 中比选择 Android RTL Support 并强制布局为 RTL 具有更好的性能。所以这是我的经验。感谢耐心的读者

以上是关于从右到左 SnackBar的主要内容,如果未能解决你的问题,请参考以下文章

使用 CATransition 从右到左并返回?

从右到左滚动文字效果

从右到左滑动抽屉菜单

如何使用 CGAffineTransform Scale 从右到左添加动画和放大动画

带有从右到左单选按钮的离子警报

Excel 互操作从右到左文档