更改 Snackbar 的字体
Changing typeface of Snackbar
我用这段代码构建 Snackbar:
Snackbar sb = Snackbar.make(drawer, "message", Snackbar.LENGTH_LONG)
.setAction("action", new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
现在我想更改消息和操作按钮的字体,但找不到任何解决方案,怎么办?
获取资产
AssetManager assets = context.getAssets();
获取字体
Typeface typeface = Typeface.createFromAsset(assets,PATH OF .TTF FILE);
路径:font/robotoregular.ttf(如果.ttf文件存放在assets/font路径)
获取小吃店视图并应用自定义
TextView tv = (TextView) sb.getView().findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
tv.setTypeface(Typeface.createFromAsset(
getAssets(),
"fonts/ur_file.ttf"));
或者这个
SpannableStringBuilder snackbarText = new SpannableStringBuilder();
snackbarText.append("Add ");
int boldStart = snackbarText.length();
snackbarText.append("bold color");
snackbarText.setSpan(new ForegroundColorSpan(0xFFFF0000), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.append(" to Snackbar text");
Snackbar.make(view, snackbarText, Snackbar.LENGTH_LONG).show();
谢谢。
您可以通过从 Snack bar 获取视图来设置 TypeFace
TextView tv = (TextView) (mSnackBar.getView()).findViewById(android.support.design.R.id.snackbar_text);
Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/font_file.ttf");
tv.setTypeface(font);
对于 AndroidX,使用资源 ID com.google.android.material.R.id.snackbar_text
同时设置 Snackbar 文本和操作的样式
您可以使用相同的方法来设置 snackbar_text
和 snackbar_action
的样式。
创建快餐栏后,您可以使用以下方法获取与文本和操作关联的视图,然后对视图应用任何调整。
Snackbar snackbar = Snackbar.make( ... ) // Create the Snackbar however you like.
TextView snackbarActionTextView = (TextView) snackbar.getView().findViewById( android.support.design.R.id.snackbar_action );
snackbarActionTextView.setTextSize( 20 );
snackbarActionTextView.setTypeface(snackbarActionTextView.getTypeface(), Typeface.BOLD);
TextView snackbarTextView = (TextView) snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
snackbarTextView.setTextSize( 16 );
snackbarTextView.setMaxLines( 3 );
在我的示例中,我将 Action 设置为 20 号字体和粗体,将 Text 设置为 16 号并允许最多 3 行。
除了:现在通过id查找snackbar的textview的包是
val snackText = snackView.findViewById<TextView>(
com.google.android.material.R.id.snackbar_text)
对于AndroidX
android.support.design.R.id.snackbar_text
将无法使用。
Use com.google.android.material.R.id.snackbar_text
instead.
如果你使用的是kotlin,那么我更喜欢你使用扩展函数:
fun Snackbar.changeFont()
{
val tv = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = Typeface.createFromAsset(context.assets, "your_font.ttf")
tv.typeface = font
}
并这样称呼它:
mSnakeBar.changeFont()
从 支持库 26 开始,字体可以用作 资源。
val mainTextView = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = ResourcesCompat.getFont(applicationContext, R.font.your_font)
mainTextView.typeface = font
如果您想更改操作按钮和文本视图的字体,请使用此代码:
Snackbar.make(this,message,Snackbar.LENGTH_LONG).also {snackbar ->
snackbar.setAction("ok"){
snackbar.dismiss()
}
val actionButton = snackbar.view.findViewById(com.google.android.material.R.id.snackbar_action) as Button
val textview = snackbar.view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = Typeface.createFromAsset(context.assets, "fonts/your_custom_font")
actionButton.typeface = font
textview.typeface = font
ViewCompat.setLayoutDirection(snackbar.view,ViewCompat.LAYOUT_DIRECTION_RTL)
}.show()
对于调用 createFromAsset() 时崩溃的每一个,您可以使用
Font font = ResourcesCompat.getFont(getApplicationContext(), R.font.your_font);
我用这段代码构建 Snackbar:
Snackbar sb = Snackbar.make(drawer, "message", Snackbar.LENGTH_LONG)
.setAction("action", new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
现在我想更改消息和操作按钮的字体,但找不到任何解决方案,怎么办?
获取资产
AssetManager assets = context.getAssets();
获取字体
Typeface typeface = Typeface.createFromAsset(assets,PATH OF .TTF FILE);
路径:font/robotoregular.ttf(如果.ttf文件存放在assets/font路径)
获取小吃店视图并应用自定义
TextView tv = (TextView) sb.getView().findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
tv.setTypeface(Typeface.createFromAsset(
getAssets(),
"fonts/ur_file.ttf"));
或者这个
SpannableStringBuilder snackbarText = new SpannableStringBuilder();
snackbarText.append("Add ");
int boldStart = snackbarText.length();
snackbarText.append("bold color");
snackbarText.setSpan(new ForegroundColorSpan(0xFFFF0000), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), boldStart, snackbarText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
snackbarText.append(" to Snackbar text");
Snackbar.make(view, snackbarText, Snackbar.LENGTH_LONG).show();
谢谢。
您可以通过从 Snack bar 获取视图来设置 TypeFace
TextView tv = (TextView) (mSnackBar.getView()).findViewById(android.support.design.R.id.snackbar_text);
Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/font_file.ttf");
tv.setTypeface(font);
对于 AndroidX,使用资源 ID com.google.android.material.R.id.snackbar_text
同时设置 Snackbar 文本和操作的样式
您可以使用相同的方法来设置 snackbar_text
和 snackbar_action
的样式。
创建快餐栏后,您可以使用以下方法获取与文本和操作关联的视图,然后对视图应用任何调整。
Snackbar snackbar = Snackbar.make( ... ) // Create the Snackbar however you like.
TextView snackbarActionTextView = (TextView) snackbar.getView().findViewById( android.support.design.R.id.snackbar_action );
snackbarActionTextView.setTextSize( 20 );
snackbarActionTextView.setTypeface(snackbarActionTextView.getTypeface(), Typeface.BOLD);
TextView snackbarTextView = (TextView) snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);
snackbarTextView.setTextSize( 16 );
snackbarTextView.setMaxLines( 3 );
在我的示例中,我将 Action 设置为 20 号字体和粗体,将 Text 设置为 16 号并允许最多 3 行。
除了
val snackText = snackView.findViewById<TextView>(
com.google.android.material.R.id.snackbar_text)
对于AndroidX
android.support.design.R.id.snackbar_text
将无法使用。
Use
com.google.android.material.R.id.snackbar_text
instead.
如果你使用的是kotlin,那么我更喜欢你使用扩展函数:
fun Snackbar.changeFont()
{
val tv = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = Typeface.createFromAsset(context.assets, "your_font.ttf")
tv.typeface = font
}
并这样称呼它:
mSnakeBar.changeFont()
从 支持库 26 开始,字体可以用作 资源。
val mainTextView = view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = ResourcesCompat.getFont(applicationContext, R.font.your_font)
mainTextView.typeface = font
如果您想更改操作按钮和文本视图的字体,请使用此代码:
Snackbar.make(this,message,Snackbar.LENGTH_LONG).also {snackbar ->
snackbar.setAction("ok"){
snackbar.dismiss()
}
val actionButton = snackbar.view.findViewById(com.google.android.material.R.id.snackbar_action) as Button
val textview = snackbar.view.findViewById(com.google.android.material.R.id.snackbar_text) as TextView
val font = Typeface.createFromAsset(context.assets, "fonts/your_custom_font")
actionButton.typeface = font
textview.typeface = font
ViewCompat.setLayoutDirection(snackbar.view,ViewCompat.LAYOUT_DIRECTION_RTL)
}.show()
对于调用 createFromAsset() 时崩溃的每一个,您可以使用
Font font = ResourcesCompat.getFont(getApplicationContext(), R.font.your_font);