从右到左 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();
更新
由于您有Text
和Action
作为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的主要内容,如果未能解决你的问题,请参考以下文章