2016-02-07 14 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(); 

更新

あなたはTextViewとしてTextActionを持っているので、あなたは彼らのために他の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を使用してください。17 https://stackoverflow.com/questions/30463608/set-layoutdirection-rtl-for-api-lower-than-17/37670836 。 –

2

あなたがローカルに基づいてこれを設定する必要があります。 Androidはこの機能をサポートしています。

Android APIレベル17以降では、ネイティブにRTLをサポートしています。あなたのレイアウト全体を強制的にActionBarを含むRTLにするには、次のようにします。アプリケーションタグの下のAndroidマニフェストで

は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これを実装defince

android:supportsRtl="true" 

これを保ちます

+0

おかげで、どのような程度APIレベル17〜?私のアプリ分sdkは14です。 – Seyyed

+0

これはベストプラクティスではありません。 RTL言語に奇妙なことが起きるのを避けるためのより良い方法アンドロイドアプリ開発の恋人はカスタムRTLレイアウトを作成し、アプリ全体のあらゆる場所でそれを膨張させます。カスタムRTLレイアウトを持つツールバーは、Android RTLサポートを選択し、レイアウトを強制的にRTLにするよりも、各APIで優れたパフォーマンスを発揮します。これは私の経験です。ありがとう患者の読者 – Setmax

2

私はこのprを解決しましたこのレフェレンスに従ってスナックレイアウト用のカスタムレイアウトを設定して

customize snackBar's layout

3

ちょうどこのコードを追加します。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(); 
アプリケーションタグの下のAndroidマニフェストで

この

アンドロイドを保ちます

+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でコード専用の回答が得られないため、コードがどうやって問題を解決するのか説明してください。また、答えが以前の古い回答(主に受け入れられた回答)を上回っている理由を説明することもできます。 –