我使用android studio创建一个android应用。我的API版本高于16,并且使用支持库26。 我在res-> font下面创建了一个字体家族,并将其命名为“ cairo_regular.ttf”。 在我的android应用中,在我的界面之一中,我使用具有下拉样式的Spinner来显示所有国家/地区的列表,以下是xml代码:
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_marginRight="16dp"
android:prompt="@string/spinner_title" />
我在类java中的构造函数外部声明了适配器,即:
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, countryTab);
country.setAdapter(arrayAdapter);
我还在布局文件夹中制作了以下自定义xml文件:
<android.support.v7.widget.AppCompatTextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/text1"
style="?android:attr/dropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee"
android:singleLine="true"
android:fontFamily="@font/cairo_regular"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu" />
我添加了自定义xml文件“ android:fontFamily =“ @ font / cairo_regular”“,以更改微调器中的国家/地区列表的字体,但该字体没有更改。 我想知道如何在我的应用程序中更改Spinner的字体。
答案 0 :(得分:3)
因此,让我们尝试了解在尝试填充Spinner时编写此代码行会发生什么情况。
[ArrayAdapter<String> spinnerAdapter= new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, dataInsideSpinner); // here dataInsideSpinner is a List<>
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);]
android.R.layout.simple_list_item_1
是Spinner's Item的布局,或者是未选中时的布局(通常在屏幕上如何显示)
android.R.layout.simple_dropdown_list
是在您选择微调器并显示 Dropdown Items
因此,您可以通过两种方式自定义微调框。
通过修改android.R.layout.simple_list_item_1
和android.R.layout.simple_dropdown_list
来更改布局文件
或者通过更改您的Java文件!如下面的一些答案所述。但是这种方法似乎更容易,更轻松!
每次尝试使用这两个文件时,微调器将显示更改(在这些文件中所做的更改)。
否则,首选的方法是编写2个自定义布局文件 1> custom_spinner_list_item 2> Custom_spinner_dropdown_item(单击渲染红色)
这是完成方式的摘要。 custom_spinner_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
style="?attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fontFamily="@font/roman"
android:singleLine="true"
android:textAlignment="inherit"
android:textColor="@color/black90opacity"
android:textSize="14sp">
</TextView>
custom_spinner_dropdown_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
style="?attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="?attr/dropdownListPreferredItemHeight"
android:ellipsize="marquee"
android:fontFamily="@font/roman"
android:singleLine="true"
android:textAlignment="textStart"
android:textColor="@color/black90opacity"
android:textSize="14sp">
</TextView>
现在在将数据插入适配器的位置使用这些文件
ArrayAdapter<String> spinnerAdapter= new ArrayAdapter<>(getApplicationContext(), R.layout.custom_spinner_list_item.xml, dataInsideSpinner); // here dataInsideSpinner is a List<>
spinnerAdapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item.xml);
应该很好! :)
答案 1 :(得分:0)
这是我的操作方式:
FontCache类:
import android.content.Context;
import android.graphics.Typeface;
import java.util.HashMap;
public class FontCache {
private static HashMap<String, Typeface> fontCache = new HashMap<>();
public static Typeface getTypeface(String fontname, Context context) {
Typeface typeface = fontCache.get(fontname);
if (typeface == null) {
try {
typeface = Typeface.createFromAsset(context.getAssets(), fontname);
} catch (Exception e) {
return null;
}
fontCache.put(fontname, typeface);
}
return typeface;
}
}
然后创建一个扩展TextView的自定义类:
public class MontserratRegularTextView extends android.support.v7.widget.AppCompatTextView {
public MontserratRegularTextView(Context context) {
super(context);
applyCustomFont(context);
}
public MontserratRegularTextView(Context context, AttributeSet attrs) {
super(context, attrs);
applyCustomFont(context);
}
public MontserratRegularTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
applyCustomFont(context);
}
private void applyCustomFont(Context context) {
Typeface customFont = FontCache.getTypeface("fonts/Montserrat-Regular.otf", context);//your font path here
setTypeface(customFont);
}
}
然后将其添加到正在创建的自定义xml文件中:
<com.example.myapplication.customFonts.MontserratRegularTextView
android:id="@+id/user_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/nav_header_title"
/>
希望这对您有帮助!