customAdapter 中的自定义字体
custom font in customAdapter
我为我的 listView 使用自定义适配器,我想使用自定义字体制作 textView。
listView 在片段中:
todolist_fragment.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"
android:orientation="vertical"
>
<ListView
android:id="@+id/checkable_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
todolistfragment.java
public class toDoListFragment 扩展片段 {
ListView checkableList;
Button showSelectedButton;
List<itemsModel> itemsList;
public toDoListFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_todolist, container, false);
checkableList = rootView.findViewById(R.id.checkable_list);
itemsList = new ArrayList<>();
itemsList.add(new itemsModel(false, "item1"));
itemsList.add(new itemsModel(false, "item2"));
itemsList.add(new itemsModel(false, "item3"));
itemsList.add(new itemsModel(false, "item4"));
itemsList.add(new itemsModel(false, "item5"));
itemsList.add(new itemsModel(false, "item6"));
itemsList.add(new itemsModel(false, "item7"));
final customList adapter = new customList(getActivity(), itemsList);
checkableList.setAdapter(adapter);
checkableList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
itemsModel model = itemsList.get(i);
if(model.isSelected())
model.setSelected(false);
else
model.setSelected(true);
itemsList.set(i, model);
adapter.updateRecords(itemsList);
}
});
return rootView;
}
}
所以我创建了 customList.java:
public class customList extends BaseAdapter {
Activity activity;
List<itemsModel> itemsList;
LayoutInflater inflater;
public customList(Activity activity) {
this.activity = activity;
}
public customList(Activity activity, List<itemsModel> itemsList) {
this.activity = activity;
this.itemsList = itemsList;
inflater = activity.getLayoutInflater();
}
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder = null;
if(view == null){
view = inflater.inflate(R.layout.list_view_item_row, viewGroup, false);
holder = new ViewHolder();
holder.itemText = view.findViewById(R.id.itemName);
holder.checkBox = view.findViewById(R.id.checkboxIcon);
view.setTag(holder);
}else
holder = (ViewHolder) view.getTag();
itemsModel model = itemsList.get(i);
holder.itemText.setText(model.getItemsList());
if(model.isSelected())
holder.checkBox.setBackgroundResource(R.drawable.checked);
else
holder.checkBox.setBackgroundResource(R.drawable.check);
return view;
}
public void updateRecords(List<itemsModel> itemsList){
this.itemsList = itemsList;
notifyDataSetChanged();
}
class ViewHolder{
TextView itemText;
ImageView checkBox;
}
}
布局 "list_view_item_row.xml" 是带有 imageview Checkbox 和 textview 项目的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:padding="5dp" >
<ImageView
android:id="@+id/checkboxIcon"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_centerVertical="true"
android:background="@drawable/check"/>
<TextView
android:id="@+id/itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/checkboxIcon"
android:layout_toStartOf="@+id/checkboxIcon"
android:padding="10dp"
android:text="Item Name"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
/>
我手动设置自定义字体...像这样:
TextView textView;
textView = rootView.findViewById(R.id.text1);
Typeface customFontBold = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Assistant-Bold.ttf");
textView.setTypeface(customFontBold);
在哪里可以设置自定义字体?
谢谢。
在 class 中进行了更改试试这个
public class customList extends BaseAdapter {
Activity activity;
List<itemsModel> itemsList;
LayoutInflater inflater;
private Typeface customFontBold;
public customList(Activity activity) {
this.activity = activity;
}
public customList(Activity activity, List<itemsModel> itemsList) {
this.activity = activity;
this.itemsList = itemsList;
inflater = activity.getLayoutInflater();
customFontBold = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Assistant-Bold.ttf");
}
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder = null;
if (view == null) {
view = inflater.inflate(R.layout.list_view_item_row, viewGroup, false);
holder = new ViewHolder();
holder.itemText = view.findViewById(R.id.itemName);
holder.checkBox = view.findViewById(R.id.checkboxIcon);
holder.itemText.setTypeface(customFontBold);
view.setTag(holder);
} else
holder = (ViewHolder) view.getTag();
itemsModel model = itemsList.get(i);
holder.itemText.setText(model.getItemsList());
if (model.isSelected())
holder.checkBox.setBackgroundResource(R.drawable.checked);
else
holder.checkBox.setBackgroundResource(R.drawable.check);
return view;
}
public void updateRecords(List<itemsModel> itemsList) {
this.itemsList = itemsList;
notifyDataSetChanged();
}
class ViewHolder {
TextView itemText;
ImageView checkBox;
}
}
我使用了 akhilesh0707 答案,但我更改了它。
public customList(Activity activity, List<itemsModel> itemsList) {
this.activity = activity;
this.itemsList = itemsList;
inflater = activity.getLayoutInflater();
customFontBold = Typeface.createFromAsset(activity.getApplication().getAssets(), "fonts/Assistant-Bold.ttf");
}
谢谢 akhilesh0707。
我为我的 listView 使用自定义适配器,我想使用自定义字体制作 textView。 listView 在片段中: todolist_fragment.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"
android:orientation="vertical"
>
<ListView
android:id="@+id/checkable_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
todolistfragment.java
public class toDoListFragment 扩展片段 {
ListView checkableList;
Button showSelectedButton;
List<itemsModel> itemsList;
public toDoListFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_todolist, container, false);
checkableList = rootView.findViewById(R.id.checkable_list);
itemsList = new ArrayList<>();
itemsList.add(new itemsModel(false, "item1"));
itemsList.add(new itemsModel(false, "item2"));
itemsList.add(new itemsModel(false, "item3"));
itemsList.add(new itemsModel(false, "item4"));
itemsList.add(new itemsModel(false, "item5"));
itemsList.add(new itemsModel(false, "item6"));
itemsList.add(new itemsModel(false, "item7"));
final customList adapter = new customList(getActivity(), itemsList);
checkableList.setAdapter(adapter);
checkableList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
itemsModel model = itemsList.get(i);
if(model.isSelected())
model.setSelected(false);
else
model.setSelected(true);
itemsList.set(i, model);
adapter.updateRecords(itemsList);
}
});
return rootView;
}
}
所以我创建了 customList.java:
public class customList extends BaseAdapter {
Activity activity;
List<itemsModel> itemsList;
LayoutInflater inflater;
public customList(Activity activity) {
this.activity = activity;
}
public customList(Activity activity, List<itemsModel> itemsList) {
this.activity = activity;
this.itemsList = itemsList;
inflater = activity.getLayoutInflater();
}
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder = null;
if(view == null){
view = inflater.inflate(R.layout.list_view_item_row, viewGroup, false);
holder = new ViewHolder();
holder.itemText = view.findViewById(R.id.itemName);
holder.checkBox = view.findViewById(R.id.checkboxIcon);
view.setTag(holder);
}else
holder = (ViewHolder) view.getTag();
itemsModel model = itemsList.get(i);
holder.itemText.setText(model.getItemsList());
if(model.isSelected())
holder.checkBox.setBackgroundResource(R.drawable.checked);
else
holder.checkBox.setBackgroundResource(R.drawable.check);
return view;
}
public void updateRecords(List<itemsModel> itemsList){
this.itemsList = itemsList;
notifyDataSetChanged();
}
class ViewHolder{
TextView itemText;
ImageView checkBox;
}
}
布局 "list_view_item_row.xml" 是带有 imageview Checkbox 和 textview 项目的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:padding="5dp" >
<ImageView
android:id="@+id/checkboxIcon"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_centerVertical="true"
android:background="@drawable/check"/>
<TextView
android:id="@+id/itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/checkboxIcon"
android:layout_toStartOf="@+id/checkboxIcon"
android:padding="10dp"
android:text="Item Name"
android:textColor="@android:color/black"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
/>
我手动设置自定义字体...像这样:
TextView textView;
textView = rootView.findViewById(R.id.text1);
Typeface customFontBold = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Assistant-Bold.ttf");
textView.setTypeface(customFontBold);
在哪里可以设置自定义字体? 谢谢。
在 class 中进行了更改试试这个
public class customList extends BaseAdapter {
Activity activity;
List<itemsModel> itemsList;
LayoutInflater inflater;
private Typeface customFontBold;
public customList(Activity activity) {
this.activity = activity;
}
public customList(Activity activity, List<itemsModel> itemsList) {
this.activity = activity;
this.itemsList = itemsList;
inflater = activity.getLayoutInflater();
customFontBold = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Assistant-Bold.ttf");
}
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder = null;
if (view == null) {
view = inflater.inflate(R.layout.list_view_item_row, viewGroup, false);
holder = new ViewHolder();
holder.itemText = view.findViewById(R.id.itemName);
holder.checkBox = view.findViewById(R.id.checkboxIcon);
holder.itemText.setTypeface(customFontBold);
view.setTag(holder);
} else
holder = (ViewHolder) view.getTag();
itemsModel model = itemsList.get(i);
holder.itemText.setText(model.getItemsList());
if (model.isSelected())
holder.checkBox.setBackgroundResource(R.drawable.checked);
else
holder.checkBox.setBackgroundResource(R.drawable.check);
return view;
}
public void updateRecords(List<itemsModel> itemsList) {
this.itemsList = itemsList;
notifyDataSetChanged();
}
class ViewHolder {
TextView itemText;
ImageView checkBox;
}
}
我使用了 akhilesh0707 答案,但我更改了它。
public customList(Activity activity, List<itemsModel> itemsList) {
this.activity = activity;
this.itemsList = itemsList;
inflater = activity.getLayoutInflater();
customFontBold = Typeface.createFromAsset(activity.getApplication().getAssets(), "fonts/Assistant-Bold.ttf");
}
谢谢 akhilesh0707。