如何创建一个包含所有资源/对象的类来处理许多片段

时间:2015-10-21 15:33:07

标签: android

我想创建一个包含我在许多不同类和片段(类)中使用的所有静态对象/资源的类。 所以基本上我希望能够在片段类中说: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";

//------------------------------------------------------------------------
}

2 个答案:

答案 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