从右到左 SnackBar

Right To Left SnackBar

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

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

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

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

android:supportsRtl="true"

在 Utils 中定义这样的方法 class

@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 作为参考并为 snackbar 实现它

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

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

只需添加以下代码:

在应用程序标签下的 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();
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();
}

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

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);

只有你需要:

         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();