我想创建一个包含我在许多不同类和片段(类)中使用的所有静态对象/资源的类。 所以基本上我希望能够在片段类中说:Style.example3,当我为特定的TextView设置字体时。
但是我一直收到错误,比如在Style类中找不到路径或文件。我还尝试使用Application扩展Style类,并使用context或getAplicationContext.getAssets,没有任何succses。
现在我每次都在使用它们的每个片段类中创建每个资产或字体,这不太好。
public class Style {
//-----------------------FONTS------------------------
public Typeface example1 = Typeface.createFromAsset(getAssets(), "fonts/FreeSerif.ttf");
public Typeface example2 = Typeface.createFromAsset(getAssets(), "fonts/Arimo-Regular.ttf");
public Typeface example3 = Typeface.createFromFile("fonts/FreeSerif.ttf");
public Typeface example4 = Typeface.createFromFile("fonts/FreeSerif.ttf");
//------------------------Color backgrounds HEX------------------------
public static String darkgray = "#373737";
public static String lightgray = "#e6e6e6";
public static String oldpaper = "#EAE1D8";
public static String lightpink = "#feaec9";
public static String darkpink = "#ff0f68";
public static String redpink = "#E849A1";
public static String yellow = "#F7E84E";
public static String orange = "#FFB732";
public static String skyblue = "#48B1E3";
public static String green = "#5dd95d";
public static String softblack = "#3d3d3d";
//------------------------------------------------------------------------
}
答案 0 :(得分:1)
你不应该做那种事情。 Android中的良好实践建议您在XML中尽可能多地执行操作。所以基本上,你可以做的是创建一个扩展AppCompatActivity
的BaseActivity,并使你的活动扩展到BaseActivity。
您可以做的另一件事是创建自己的Widget。自定义文本视图与自定义字体的示例。
public class CustomTextView extends TextView {
public CustomTextView(Context c) {
super(c);
init(null);
}
public CustomTextView(Context c, AttributeSet attrs) {
super(c, attrs);
init(attrs);
}
public CustomTextView(Context c, AttributeSet attrs, int style) {
super(c, attrs, style);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CustomTextView);
String fontName = a.getString(R.styleable.CustomTextView_font_name);
if (fontName != null) {
Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + fontName);
setTypeface(myTypeface);
}
a.recycle();
}
}
并在您的xml布局中:
<com.shopmium.views.widgets.CustomTextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/textview"
app:font_name="Roboto-Medium.ttf" />
最后,尽可能多地使用您的资源文件:
styles.xml
colors.xml
并使用它:R.color.mycolor
希望它有所帮助!
答案 1 :(得分:-1)
对全局类使用静态导入,然后在本地使用静态对象。 https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html