Android,setText和setTypeface都行不通

时间:2016-06-13 18:26:09

标签: android android-layout android-studio

我对某些事情有一个小问题,我已多次并且正确地进行了调查。我想使用我的自己的字体,resp。外部谷歌Roboto字体用于我在MainActivity中的按钮文本,因此我使用一个简单的代码,该代码在应用程序/活动启动时,之前有效,但现在不在 onCreate()方法中。然后我尝试只是chane文本,但它也没有用。应用程序启动后,它就像处理activity_main.xml,任何更改一样。当我使用其他按钮功能时,它可以工作。哪里有问题?因为我想在活动开始后立即设置它。

MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    DbHelper cryfi_db = new DbHelper(this);
    DbHelper_user user_db = new DbHelper_user(this);

    Button btn_ratings = (Button) findViewById(R.id.btn_ratings);
    Typeface roboto_light = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Light.ttf");
    btn_ratings.setTypeface(roboto_light);

    //here are some others working functions for sqlite dbs
}

public void onButtonClick(View v){
    Button btn_ratings = (Button) findViewById(R.id.btn_ratings);
    Typeface roboto_light = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Light.ttf");
    btn_ratings.setTypeface(roboto_light);
}

问题是否可以与数据库功能或扩展AppCompatActivity相关联?

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/iv_intro"
    android:src="@drawable/intro_1"
    android:scaleType="fitXY" />

<Button
    android:id="@+id/btn_ratings"
    android:text="@string/ratings"
    android:textColor="#FFFFFF"
    android:textSize="20sp"
    android:layout_width="200dp"
    android:layout_height="40dp"
    android:background="@drawable/intro_btn"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp" />

<Button
    android:id="@+id/btn_generate"
    android:text="@string/generate"
    android:textColor="#FFFFFF"
    android:textSize="20sp"
    android:layout_width="200dp"
    android:layout_height="40dp"
    android:background="@drawable/intro_btn"
    android:layout_marginBottom="20dp"
    android:layout_above="@+id/btn_ratings"
    android:layout_alignLeft="@+id/btn_ratings"
    android:layout_alignStart="@+id/btn_ratings" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="OtherButton"
    android:id="@+id/button2"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="47dp"
    android:layout_below="@+id/ib_settings"
    android:onClick="onButtonClick" />

我有其他的imageButtons,但它们没有任何关系。

3 个答案:

答案 0 :(得分:1)

确保您的ttf文件位于main / assets / fonts文件夹中。 在

中尝试相同的代码
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus){
             Button btn_ratings = (Button) findViewById(R.id.btn_ratings);
             Typeface roboto_light = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Light.ttf");
            btn_ratings.setTypeface(roboto_light);
        }
    }

答案 1 :(得分:0)

使用TypeFaceHelper类来缓存字体并使用它们。

public class Typefaces{

    private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

    public static Typeface get(Context c, String name){
        synchronized(cache){
            if(!cache.containsKey(name)){
                Typeface t = Typeface.createFromAsset(c.getAssets(), String.format("fonts/%s.ttf", name));
                cache.put(name, t);
            }
            return cache.get(name);
        }
    }    
}

现在您可以使用Typefaces.get更改字体。

btn_ratings.setTypeface(Typefaces.get(this, "fonts/Roboto-Light.ttf"));

答案 2 :(得分:0)

创建一个可以解决问题的自定义按钮:

public final class RobotoButton extends Button {
    private static Typeface mTypeface;
     public RobotoButton(final Context context, final AttributeSet attrs) {
         super(context, attrs);
         setTypeface(Typeface.createFromAsset(getAssets(), "fonts/Roboto-Light.ttf"));
     }
}

在你的xml中:

<com.x.RobotoButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="OtherButton"......./>