2015-03-30 4 views
1

Использование пользовательских шрифтов для приложения Scientific Calculator в Android Studio

<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" android:paddingLeft="@dimen/activity_horizontal_margin" 
 
    android:paddingRight="@dimen/activity_horizontal_margin" 
 
    android:paddingTop="@dimen/activity_vertical_margin" 
 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" 
 
    android:labelFor="@android:color/holo_blue_light" 
 
    android:clickable="true"> 
 

 
    <com.example.girikarnal.trial.CalculatorButtonTextView 
 
     android:id="@+id/acbutton" 
 
     android:text="@string/AC" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" /> 
 

 
    <Button 
 
     style="?android:attr/buttonStyleSmall" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:text="@string/calc" 
 
     android:id="@+id/button2" 
 
     android:layout_above="@+id/button3" 
 
     android:layout_alignParentStart="true" 
 
     android:layout_marginBottom="73dp" /> 
 

 
    <com.example.girikarnal.trial.CalculatorButtonButton 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/button3" 
 
     android:text="@string/xsquare" 
 
     android:layout_centerVertical="true" 
 
     android:layout_alignParentStart="true" 
 
     android:background="#ffbfa2ff" 
 
     android:clickable="true" 
 
     android:labelFor="@android:color/black" /> 
 

 
<com.example.girikarnal.trial.CalculatorButtonButton 
 
    android:layout_width="wrap_content" 
 
    android:layout_height="wrap_content" 
 
    android:id="@+id/button4" 
 
    android:text="@string/hyp" 
 
    android:layout_alignParentTop="true" 
 
    android:layout_alignParentEnd="true" 
 
    android:layout_marginEnd="84dp" /> 
 

 
</RelativeLayout>

public class MainActivity extends ActionBarActivity { 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     CalculatorButtonTextView jtv; 
 
     Button jb; 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     jtv=(CalculatorButtonTextView)findViewById(R.id.acbutton); 
 
     jb=(Button)findViewById(R.id.button2); 
 
     Typeface tf; 
 
     tf=Typeface.createFromAsset(getAssets(),"fonts/casiofont.ttf"); 
 
     jb.setTypeface(tf); 
 

 
    }

public class CalculatorButtonTextView extends TextView { 
 

 
    // Constructors 
 
    public CalculatorButtonTextView(Context context, AttributeSet attrs, int defStyle) { 
 
     super(context, attrs, defStyle); 
 
     init(); 
 
    } 
 
    public CalculatorButtonTextView(Context context, AttributeSet attrs) { 
 
     super(context, attrs); 
 
     init(); 
 
    } 
 
    public CalculatorButtonTextView(Context context) { 
 
     super(context); 
 
     init(); 
 
    } 
 

 
    // This class requires casiofont.ttf to be in the assets/fonts folder 
 
    private void init() { 
 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
 
       "fonts/casiofont.ttf"); 
 
     setTypeface(tf); 
 
    }

public class CalculatorButtonButton extends Button { 
 
    public CalculatorButtonButton(Context context) { 
 
     super(context); 
 
     init(); 
 
    } 
 

 
    public CalculatorButtonButton(Context context, AttributeSet attrs) { 
 
     super(context, attrs); 
 
     init(); 
 
    } 
 

 
    public CalculatorButtonButton(Context context, AttributeSet attrs, int defStyleAttr) { 
 
     super(context, attrs, defStyleAttr); 
 
     init(); 
 
    } 
 

 
    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
 
    public CalculatorButtonButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
 
     super(context, attrs, defStyleAttr, defStyleRes); 
 
     init(); 
 
    } 
 
    private void init() { 
 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
 
       "fonts/casiofont.ttf"); 
 
     setTypeface(tf); 
 
    } 
 
}

<resources> 
 
    <string name="app_name">fx-991ES</string> 
 

 
    <string name="action_settings">Settings</string> 
 
    <string name="AC">C</string> 
 
    <string name="calc">r</string> 
 
    <string name="xsquare">d</string> 
 
    <string name="hyp">c</string> 
 

 
</resources>

Я строю научный калькулятор в Android Studio и я хочу использовать шрифты из TTF файл я получил от веб-сайта CaSiO, я поместил их в активы/fonts, как было предложено в некоторых других страницах, но когда я запускаю приложение, я получаю сообщение об ошибке «родной тип лица не может быть сделан». Также есть и другие сомнения в том, что есть файл, называемый клавиатурой, поставляемый с файлом шрифта, который я скачал, например, «c = ac». Я новичок, пожалуйста, помогите мне. Я добавил ссылку для загрузки файла ttf. «http://edu.casio.com/education/fontset/» Скачать шрифт для FX-ES плюс серия

ответ

0

Для каждой кнопки или TextView (я хотел бы сделать мои кнопки, используя TextViews, потому что они являются более гибкими), вам необходимо установить Typeface.

Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
      "fonts/ES03.TTF"); 
myButton.setTypeface(tf); 

Поскольку у вас есть много кнопок это может быть просто легче сделать пользовательский класс кнопки, расширяющий TextView:

public class CalculatorButtonTextView extends TextView { 

    // Constructors 
    public CalculatorButtonTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 
    public CalculatorButtonTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 
    public CalculatorButtonTextView(Context context) { 
     super(context); 
     init(); 
    } 

    // This class requires ES03.TTF to be in the assets/fonts folder 
    private void init() { 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
       "fonts/ES03.TTF"); 
     setTypeface(tf); 
    } 

} 

, а затем в файле XML, чтобы сделать что-то вроде этого для каждой кнопки/TextView:

<RelativeLayout 
    android:id="@+id/key_41" 
    style="@style/AppTheme.KeyLayoutStyle" 
    android:layout_weight="1" > 

    <com.mycalculatorapp.CalculatorButtonTextView 
      android:id="@+id/tvKey41" 
      style="@style/AppTheme.KeyTextStyle" 
      android:text="@string/key_41" /> 
</RelativeLayout> 

Я вырезания и вставки из another project, чтобы сэкономить время, поэтому фактический стиль не показан здесь. Изучите этот проект больше, чтобы увидеть, как я применял стили и строки, если это вопрос.

Наконец, используя FontForge для просмотра шрифта, вы можете видеть, что обычные буквы и цифры перезаписываются символами калькулятора.

enter image description here

Наконец, вы будете делать что-то вроде

myButton.setText ("C");

, чтобы получить символ кнопки AC. (Или еще лучше сделать это в ваших xml-файлах.)

Это метод, который я использовал для отображения специальных символов/глифов, которые не поддерживались системными шрифтами.

Update

Поскольку до сих пор не работает для вас, я решил попробовать сам.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_calculator); 

    Button jb=(Button)findViewById(R.id.button1); 

    Typeface tf; 
    tf=Typeface.createFromAsset(getAssets(),"fonts/casio.ttf"); 
    jb.setTypeface(tf); 

    //jb.setText("Cc"); 
} 

Xml:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Cc" 
    android:id="@+id/button1" 
    android:textSize="30dp" /> 

Это работает для меня как, установив текст в XML и в коде. Я мог видеть как AC, так и знаки hyp. Поэтому я думаю, что у вас должна быть другая проблема, если вы получаете только капитальные версии. Попробуйте перезапустить новый проект.

Кстати, вы можете остерегаться утечек памяти, если вы создаете экземпляр TypeFace в пользовательской Button или TextView и создаете отдельный класс для TypeFace, о котором говорится о here. Если вы не создадите собственный класс, вы можете просто применить тот же шрифт ко всем вашим кнопкам в onCreate.

+0

спасибо, что это сработало, но возникла проблема .. caps C для «AC», маленький c для функции «hyp». Но когда я вхожу в c, он дает только «AC». Как решить эту проблему. – karnal

+0

Редактируйте свой вопрос с помощью своего кода. – Suragch

+0

Я добавил код, пожалуйста, скажите, как исправить эту проблему. – karnal

Смежные вопросы