Я хочу изменить font-family
из textview
во всем приложении
В настоящее время я использую следующий код
Я добавил font
в мою папку res/font
( Нажмите здесь, чтобы проверить каталог res / font )
Вот мои font.xml
файлы
font / font_one
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font
android:font="@font/oswald_regular"
android:fontStyle="normal"
android:fontWeight="400"
app:font="@font/oswald_regular"
app:fontStyle="normal"
app:fontWeight="400" />
<font
android:font="@font/oswald_bold"
android:fontStyle="italic"
android:fontWeight="400"
app:font="@font/oswald_bold"
app:fontStyle="italic"
app:fontWeight="400" />
</font-family>
@ font / font_two
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font
android:font="@font/opensans_regular"
android:fontStyle="normal"
android:fontWeight="400"
app:font="@font/opensans_regular"
app:fontStyle="normal"
app:fontWeight="400" />
<font
android:font="@font/opensans_bold"
android:fontStyle="italic"
android:fontWeight="400"
app:font="@font/opensans_bold"
app:fontStyle="italic"
app:fontWeight="400" />
</font-family>
вот мой макет xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/sampleTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="?backColor"
android:fontFamily="@font/font_two"
android:padding="20dp"
android:text="@string/app_name"
android:textColor="?textColor"
android:textStyle="normal" />
<TextView
android:id="@+id/sampleTextView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="?backColor"
android:fontFamily="@font/font_one"
android:padding="20dp"
android:text="@string/app_name"
android:textColor="?textColor"
android:textStyle="italic" />
</LinearLayout>
<Spinner
android:id="@+id/fontSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
<Spinner
android:id="@+id/themeSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
<Button
android:id="@+id/btnChaneFont"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="@drawable/test"
android:text="Change Font"
android:textColor="?textColor" />
<Button
android:id="@+id/btnChaneTheme"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="@drawable/test"
android:text="Change Theme"
android:textColor="?textColor" />
</LinearLayout>
вот мой вывод, когда я 'м, используя android:fontFamily
его хорошо просыпается согласно моему требованию
ВЫХОД, используя android:fontFamily="@font/font_one"
из XML
ВЫХОД с использованием android:fontFamily="@font/font_two"
из XML
Вот код моей MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener {
Spinner fontSpinner, themeSpinner;
Button btnChaneFont, btnChaneTheme;
TextView sampleTextView, sampleTextView2;
int theme = R.style.AppTheme;
String[] fontsArray = new String[]{"Oswald Fonts", "Open Sans Fonts", "Raleway Fonts"};
String[] themeArray = new String[]{"Theme 1", "Theme 2", "Theme 3"};
Typeface typeface = null;
PrefManager prefManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
new ThemeColors(this);
prefManager = new PrefManager(this);
getTheme().applyStyle(prefManager.getTheme(), true);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
fontSpinner = findViewById(R.id.fontSpinner);
themeSpinner = findViewById(R.id.themeSpinner);
btnChaneFont = findViewById(R.id.btnChaneFont);
btnChaneTheme = findViewById(R.id.btnChaneTheme);
btnChaneFont.setOnClickListener(this);
btnChaneTheme.setOnClickListener(this);
fontSpinner.setOnItemSelectedListener(this);
themeSpinner.setOnItemSelectedListener(this);
sampleTextView = findViewById(R.id.sampleTextView);
sampleTextView2 = findViewById(R.id.sampleTextView2);
ArrayAdapter<String> fontAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, fontsArray);
fontSpinner.setAdapter(fontAdapter);
ArrayAdapter<String> themeAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, themeArray);
themeSpinner.setAdapter(themeAdapter);
}
@Override
public void onClick(View view) {
if (view == btnChaneTheme) {
recreate();
}
if (view == btnChaneFont) {
sampleTextView.setTypeface(typeface);
sampleTextView2.setTypeface(typeface);
}
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int i, long l) {
switch (parent.getId()) {
case R.id.fontSpinner:
switch (i) {
case 0:
typeface = ResourcesCompat.getFont(MainActivity.this, R.font.font_one);
break;
case 1:
typeface = ResourcesCompat.getFont(MainActivity.this, R.font.font_two);
break;
case 2:
typeface = ResourcesCompat.getFont(MainActivity.this, R.font.font_three);
break;
}
break;
case R.id.themeSpinner:
switch (i) {
case 0:
prefManager.setTheme(R.style.AppTheme);
break;
case 1:
prefManager.setTheme(R.style.AppTheme2);
break;
case 2:
prefManager.setTheme(R.style.AppTheme3);
break;
}
break;
default:
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
СейчасКогда я изменяю гарнитуру текстового представления программно с использованием Java, я получаю ниже результат
ВЫХОД с использованием font / font_two "из JAVA
ВЫХОД с использованиемfont / font_two "из JAVA
В настоящее время я сталкиваюсь с проблемой ниже, используякод выше
- Когда я устанавливаю
font-family
, используя XML
, я получаю оба эффекта шрифта обычный и курсив , но когдая настраиваю font-family
, используя java
курсив шрифт настроен неправильно (вы можете проверить результат обоих, я добавил скриншот) - как установить
font-family
используя java
- есть ли способ установить для всего приложения
- Как можно получить такое же поведение
font-family
, как и XML
, используя java
Может ли кто-нибудь помочь мне в этом? Я хочу изменить font-family
всего приложения
Вот еще один пост, который я посетил, но не помог мне решить мою проблему
Если вам нужна дополнительная информация, пожалуйста, дайте мнезнать.Заранее спасибо.Ваши усилия будут оценены.