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

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

【问题讨论】:

    标签: android right-to-left android-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);
      

      【讨论】:

      【解决方案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();
      }
      

      【讨论】:

      • 请解释您的代码如何以及为什么解决问题,因为 StackOverflow 不接受纯代码的答案。此外,您可以解释为什么您的答案超过了以前的旧答案(主要是已接受的答案)。
      【解决方案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 具有更好的性能。所以这是我的经验。感谢耐心的读者
        猜你喜欢
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 2022-01-13
        • 2017-07-22
        • 2016-05-02
        • 2016-03-01
        • 2012-01-18
        相关资源
        最近更新 更多