2016-02-07 119 views
10

我想在设计支持库小吃吧显示文本行动
我的语言写在从右到左。那么我如何更改SnackBar文本和动作方向?
事情是这样的:

从右到左小吃吧

enter image description here

回答

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

UPDATE

既然你有TextActionTextView你可以使用其他的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); 
+0

使用来自android.support.v4.view.ViewCompat的ViewCompat for android below 17 正如在https://stackoverflow.com/questions/30463608/set-layoutdirection-rtl-for-api-lower-than-17/37670836 。 –

2

你必须设置此基础上进行局部。 Android支持此功能。

从Android API级别17+起,它本身支持RTL。要强制你的整个布局是包括ActionBar在内的RTL,请执行以下操作。

在应用标签下的Android清单保持这种

android:supportsRtl="true" 

defince在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); 
    } 
} 

使用此回购作为参考这样的方法和实施此为小吃吧

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

+0

谢谢,怎么样API级别17-?我的app min sdk是14. – Seyyed

+0

这不是最佳做法。避免RTL语言发生奇怪事件的更好方法android应用程序开发中的爱好者创建自定义RTL布局,并在应用程序中的每个位置充气。具有自定义RTL布局的工具栏在每个API中都具有比选择Android RTL支持更好的性能,并强制布局为RTL。所以这是我的经验。感谢患者阅读器 – Setmax

3

只需添加此代码:

在Android清单应用程序标记下保持这种

机器人:supportsRtl = “真”

这:

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

好的,但它有用,而你想使用RTL方向为你的应用程序。 在某些情况下,您希望将LTR方向用于应用程序,对于某些小部件使用RTL。 – Seyyed

0
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(); 
} 
+0

请解释您的代码如何以及为什么解决这个问题,因为在StackOverflow中,仅有代码的答案不被理解。此外,你可以解释,为什么你的答案超过了以前的答案(主要是接受的答案)。 –