我对某些事情有一个小问题,我已多次并且正确地进行了调查。我想使用我的自己的字体,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,但它们没有任何关系。
答案 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"......./>