新しいデザインサポートライブラリを試して、スナックバーを追加しました。ただし、メインの背景とは異なり、テキスト領域はデフォルト値の#323232
で色付けされていません。代わりに、それは このように に見えます。 Android:background
のカスタムテーマで定義されているstyles.xml
値から色を取得しているようです。これは、次のようになります。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="Android:background">#4f4f5e</item>
...
</style>
力強く色付けしようとすると
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.YELLOW);
メインの背景にのみ影響します このように 、テキストの背景はカスタムテーマによって色付けされます。カスタムテーマを維持し、標準のスナックバーを用意する方法はありますか?ありがとう!
スナックバーの背景色を変更するには、コードから次の操作を実行できます。
Snackbar snack = Snackbar.make(...);
ViewGroup group = (ViewGroup) snack.getView();
group.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.red));
snack.show();
赤の代わりに、スナックバーのデフォルトの色を使用できます:#323232
スナックバーにはTextViewが含まれているため、両方の背景色を変更する必要があります。スナックバーは以前と同じように変更し、TextViewは次のように変更します。
View snackbarView = snackbar.getView();
TextView textView = (TextView)snackbarView.findViewById(Android.support.design.R.id.snackbar_text);
textView.setBackgroundColor(Color.YELLOW);
.setBackgroundColor
スナックバーの背景色を変更できます
msnackBar.setBackgroundColor(Color.parseColor("#009688"));
または
msnackBar.setBackgroundColor(getResources().getColor(R.color.BLUE)););
ここ は、設計サポートライブラリを使用してスナックバーを使用するための完全なチュートリアルです。
完全なサンプルは次のとおりです。
Snackbar snack = Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null);
ViewGroup group = (ViewGroup) snack.getView();
group.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.blue));
snack.show();
MainActivity.thisを現在のアクティビティまたはgetAppContext()に置き換えます
この効果は、スタイル属性Android:background
が設定されています。
もちろん、これを削除するとアプリケーションのすべてのレイアウトに影響しますが、スナックバーは修正されます。
独自のSnackbarクラスを作成し、Snackbarのmakeメソッドをシミュレートするだけです。これを行うには、Androidのスナックバーウィジェットの代わりにこのクラスを使用する必要があります。
Snackbar.class
import Android.graphics.Color;
import Android.support.annotation.IntDef;
import Android.support.annotation.IntRange;
import Android.support.annotation.NonNull;
import Android.support.design.widget.CoordinatorLayout;
import Android.support.design.widget.FloatingActionButton;
import Android.view.View;
import Java.lang.annotation.Retention;
import Java.lang.annotation.RetentionPolicy;
public class Snackbar {
/** Snackbar's lengths **/
public static final int LENGTH_SHORT = Android.support.design.widget.Snackbar.LENGTH_SHORT;
public static final int LENGTH_LONG = Android.support.design.widget.Snackbar.LENGTH_LONG;
public static final int LENGTH_INDEFINITE = Android.support.design.widget.Snackbar.LENGTH_INDEFINITE;
@NonNull
public static Android.support.design.widget.Snackbar make(@NonNull View view, @NonNull CharSequence text,
@Duration int duration) {
Android.support.design.widget.Snackbar snackbar = Android.support.design.widget.Snackbar.make(view, text, duration);
// TODO: This is where you have to customize your snackbar
snackbar.getView().setBackgroundColor(Color.RED);
return snackbar;
}
@NonNull
public static Android.support.design.widget.Snackbar make(@NonNull View view, @StringRes int resId, @Duration int duration) {
return make(view, view.getResources().getText(resId), duration);
}
// Optional
@IntDef({LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG})
@IntRange(from = 1)
@Retention(RetentionPolicy.SOURCE)
public @interface Duration {}
}
使用:
// WARNING: Make sure you're using your snackbar's package
import com.mypackage.custom_views.Snackbar;
public class MyActivity extends Activity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
Snackbar.make(view, R.string.my_msg, Snackbar.LENGTH_LONG).show();
}
}
お役に立てれば!
このライブラリを使用できます: https://github.com/SandroMachado/restaurant
new Restaurant(MainActivity.this, "Snackbar with custom background and text color", Snackbar.LENGTH_LONG)
.setBackgroundColor(Color.GRAY)
.show();
免責事項:私はライブラリを作成しました。
これは私がカスタムスナックバーを使用している方法です
Snackbar snackbar_network = Snackbar.make(rLayout, "Your Message", Snackbar.LENGTH_SHORT)
.setAction("EXIT", new View.OnClickListener() {
@Override
public void onClick(final View v) {
finish();
}
});
アクションテキストの色
snackbar_network.setActionTextColor(Color.RED);
アクションメッセージテキストの色
final View sbView = snackbar_network.getView();
final TextView tv = (TextView) sbView.findViewById(Android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.YELLOW);
スナックバーの背景を設定
sbView.setBackgroundColor(ContextCompat.getColor(MapsActivity.this, R.color.black));
snackbar_network.show();
私のためにこのように動作します:
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);
Snackbar snackbar = Snackbar.make(lineatLayout, "TEXT", Snackbar.LENGTH_LONG);
ViewGroup group = (ViewGroup) snackbar.getView();
group.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.yourColor));
TextView textView = (TextView) group.findViewById(Android.support.design.R.id.snackbar_text);
textView.setTextColor(ContextCompat.getColor(this, R.color.yor collor));
snackbar.show();
私も同様の問題に直面しましたが、残念ながら解決策はありません。そのため、親ビューの背景色も設定する独自の解決策を作成します。
TextView snackbarTextView = snackbar.getView().findViewById(Android.support.design.R.id.snackbar_text);
snackbarTextView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
ViewParent parentView = snackbarTextView.getParent();
if (parentView instanceof View) {
((View) parentView).setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
}
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
snackbar.show();