为什么可以';我不能这样访问我的Xamarin.Android项目的资产文件夹吗?
我想将TextView的字体设置为Assets文件夹中的字体。问题代码是“var font=Typeface.CreateFromAsset(Assets,“Enter The Grid.ttf”);”,不是第一次使用,而是代码末尾的第二次使用(“Assets”下面出现了红色的曲线)为什么可以';我不能这样访问我的Xamarin.Android项目的资产文件夹吗?,xamarin,xamarin.android,Xamarin,Xamarin.android,我想将TextView的字体设置为Assets文件夹中的字体。问题代码是“var font=Typeface.CreateFromAsset(Assets,“Enter The Grid.ttf”);”,不是第一次使用,而是代码末尾的第二次使用(“Assets”下面出现了红色的曲线) namespace underroundsports.Android { [活动] 公共类城市页面:活动 { 运动[]运动=运动,运动; 创建时受保护的覆盖无效(Bundle savedInstanceState)
namespace underroundsports.Android
{
[活动]
公共类城市页面:活动
{
运动[]运动=运动,运动;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.CityPage);
var font=Typeface.CreateFromAsset(资产,“输入网格.ttf”);
按钮bttJoin=findviewbyd(Resource.Id.bttJoin);
bttJoin.单击+=(发件人,e)=>
{
gotoJoinPage();
};
bttJoin.Typeface=font;
ListView lstSports=FindViewById(Resource.Id.lstSport);
lstports.Adapter=新的SportsAdapter(此为sports);
lstports.ItemClick+=(对象发送者,AdapterView.ItemClickEventArgs e)=>
{
从列表中选择的运动=运动[e.位置];
Global.Instance.CurrentSport=从列表中选择;
gotoMembersPage();
};
}
私有void gotoJoinPage()
{
var intent=新的intent(此,类型为(JoinPage));
星触觉(意向);
}
私有void gotoMembersPage()
{
var intent=新的intent(这是,类型为(MembersPage));
星触觉(意向);
}
公共类SportsAdapter:BaseAdapter
{
体育[]项目;
活动语境;
公共SportsAdapter(活动上下文,运动[]项):base()
{
this.context=上下文;
这个项目=项目;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖此[内部位置]
{
获取{返回项目[位置];}
}
公共覆盖整数计数
{
获取{return items.Length;}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
视图=转换视图;
如果(视图==null)
view=context.LayoutInflater.Inflate(全局::Android.Resource.Layout.SimpleListItem1,null);
TextView txtView=view.findviewbyd(全局::Android.Resource.Id.Text1);
var font=Typeface.CreateFromAsset(资产,“输入网格.ttf”);
txtView.Text=项目[位置].Name;
txtView.Gravity=重力梯度中心;
txtView.Typeface=font;
返回视图;
}
}
}
}
但是当我试图创建一个包含字体的变量时,我得到一个错误,告诉我:
无法通过嵌套类型访问外部类型为Android.Content.Context的非静态成员(CS0038)(UndergroundSportsAndroid)
通过查看相关问题,我认为我需要创建Assets对象的实例,或者将其设置为静态
我对C#非常陌生,不太了解发生了什么。如果有人能解释为什么我无法访问代码这一部分中的资产,我将不胜感激。最让我困惑的是,我使用完全相同的代码行访问同一文件中的字体,而没有出现错误
var font = Typeface.CreateFromAsset(context.Assets, "Enter-The-Grid.ttf");
通过构造函数将活动的实例传递给适配器,并使用它访问资产
public class SportsAdapter : BaseAdapter<Sport>
{
Sport[] items;
Activity context;
public SportsAdapter(Activity context, Sport[] items) : base()
{
this.context = context;
this.items = items;
}
....
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null)
view = context.LayoutInflater.Inflate(global::Android.Resource.Layout.SimpleListItem1, null);
TextView txtView = view.FindViewById<TextView>(global::Android.Resource.Id.Text1);
var font = Typeface.CreateFromAsset(context.Assets, "Enter-The-Grid.ttf");
txtView.Text = items[position].Name;
txtView.Gravity = GravityFlags.Center;
txtView.Typeface = font;
return view;
}
}
公共类SportsAdapter:BaseAdapter
{
体育[]项目;
活动语境;
公共SportsAdapter(活动上下文,运动[]项):base()
{
this.context=上下文;
这个项目=项目;
}
....
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
视图=转换视图;
如果(视图==null)
view=context.LayoutInflater.Inflate(全局::Android.Resource.Layout.SimpleListItem1,null);
TextView txtView=view.findviewbyd(全局::Android.Resource.Id.Text1);
var font=Typeface.CreateFromAsset(context.Assets,“Enter The Grid.ttf”);
txtView.Text=项目[位置].Name;
txtView.Gravity=重力梯度中心;
txtView.Typeface=font;
返回视图;
}
}
另外,请确保将.ttf文件的生成操作设置为AndroidAssets。正确的.tff文件>生成操作>AndroidAssetSportsAdapter是嵌套在CityPage活动中的类。SportsAdapter不知道上下文是什么。CityPage知道。解决此问题的最简单方法是在创建SportsAdapter的实例。我将您答案中的代码与当前代码进行了比较,结果完全相同。是否要包含您建议的更改?如果这样做,将非常有用。var font=Typeface.CreateFromAsset(context.Assets,“Enter the Grid.ttf”);请参见此行。它是context.Assets
public class SportsAdapter : BaseAdapter<Sport>
{
Sport[] items;
Activity context;
public SportsAdapter(Activity context, Sport[] items) : base()
{
this.context = context;
this.items = items;
}
....
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null)
view = context.LayoutInflater.Inflate(global::Android.Resource.Layout.SimpleListItem1, null);
TextView txtView = view.FindViewById<TextView>(global::Android.Resource.Id.Text1);
var font = Typeface.CreateFromAsset(context.Assets, "Enter-The-Grid.ttf");
txtView.Text = items[position].Name;
txtView.Gravity = GravityFlags.Center;
txtView.Typeface = font;
return view;
}
}