任何人都可以用C#解释我这个Java代码,因为我使用Mono for Android?例如,我在Mono for Android中找不到OnGlobalLayoutListener.
在Android上它看起来像这样:
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int newWidth, newHeight, oldHeight, oldWidth;
//the new width will fit the screen
newWidth = metrics.widthPixels;
//so we can scale proportionally
oldHeight = iv.getDrawable().getIntrinsicHeight();
oldWidth = iv.getDrawable().getIntrinsicWidth();
newHeight = Math.floor((oldHeight * newWidth) / oldWidth);
iv.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight));
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
//so this only happens once
iv.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
Run Code Online (Sandbox Code Playgroud)
什么是Mono for Android等价物?
我有两个可观察者,一个IObservable<AlertData>和另一个IObservable<SoundRequestData>.AlertData包含一个属性Id,知道哪个SoundRequestData属于它.SoundRequestData只知道自己,并有一个Id可以与之相匹配的属性AlertData.
我想将这两种数据类型组合成一种新类型AlertDataViewModel.但是,我无法确定两个可观察数据中的数据顺序是否相同.我现在不关心输出中的顺序.
我要的是匹配AlertData与SoundRequestData.
我现在这样做的方式,虽然有效但很慢,但要等到其中一个观察者完成将所有数据提取到a中ObservableCollection.然后我启动另一个observable并匹配Id的.
有没有更好的方法呢?我想这可以表达为以下大理石图:

所以a.id=1匹配3.id=1,b.id=2匹配4.id=2等等.
我正在使用meteor来更新数据库中的文档.但是keydown似乎没有用.这是代码.
Template.leaderboard.events({
'keydown button.inc': function(evt) {
if (evt.which === 39) {
Players.update(Session.get("character"), {$inc: {score: 20}});
}
Players.update(Session.get("character"), {$inc: {score: 20}});
//Players.update(Session.get("character"), {$set: {name: 'images/characters/ninja.png'}});
},
'keydown': function(evt) {
if (evt.which === 37) {
Players.update(Session.get("character"), {$inc: {score: -20}});
//Players.update(Session.get("character"), {$set: {name: 'images/characters/ninjaleft.png'}});
}
Players.update(Session.get("character"), {$inc: {score: -20}});
}
});
Run Code Online (Sandbox Code Playgroud)
为什么我的工作不起作用?
我正在尝试使用NFC和MvvmCross.所以我创建了一个IntentFilter如下所示:
[IntentFilter(new[]{"android.nfc.action.NDEF_DISCOVERED"},
Categories = new[] {"android.intent.category.DEFAULT"},
DataScheme = "bksv-resource", DataHost = "nmt")]
Run Code Online (Sandbox Code Playgroud)
在OnResume我正在寻找Intent类型的行动NfcAdapter.ActionNdefDiscovered.发生的是当发现NDEF时,创建Activity并使用里面的数据设置Intent.所有这一切都很好Activity,但是当想要使用MvxActivity或者问题时会出现问题MvxFragmentActivity.
问题是,当MvxActivity重新创建获取时,base.OnCreate()调用没有ViewModel返回并且没有给出任何理由,只显示如下输出:
mvx:Diagnostic: 6.09 Loading new ViewModel from Intent with Extras
mvx:Warning: 6.13 ViewModel not loaded for view ScanView
Run Code Online (Sandbox Code Playgroud)
我不完全确定如何ViewModel找到它View,但是,在这种情况下似乎找不到它.为什么会这样?我需要自定义应用程序启动吗?
我正在使用Xamarin Monodroid将我的一些Windows Phone应用程序移植到Android.
我对Xamarin的东西很新,实际上只是买了一张牌照.
到目前为止,在AXML中重新创建XAML UI非常好,但我遇到了自定义控件的问题.
这就是我所说的自定义控件:
在.NET中,我通过创建继承自'UserControl'类的类创建了一堆控件,我创建了逻辑并设置了内容.然后我用'new my_control()'等创建新实例......
我的一些控件不是以这种方式创建的,而是通过定义XAML来创建UserControl,其中没有特定的逻辑,但是当我需要组合2个或更多控件时(例如,带有文本的彩色正方形,所以Rectangle + TextBlock)我再次需要做'new my_control()'并将其添加到XAML UI(Grid,ListBox,StackPanel等)中的某个位置.
我怎么能用Monodroid实现类似的东西?
提前致谢!
我找不到任何方法来检索表示字符串的Path对象。是否存在?必要点的列表就足够了,但是我想在内部使用一条路径。
例如,在GDI +中有:
GraphicsPath p = new GraphicsPath();
p.AddString("string");
Run Code Online (Sandbox Code Playgroud)
从那里可以访问和修改“绘制的字符串”的任何点。
PS:我并不是说要沿着路径绘制文本。
在我们的应用程序中,我们有一个登录ViewController A.在用户登录时,会自动调用请求导航以导航到下一个ViewController B.然而,当这样做,我们要删除的登录ViewController A从堆栈,使用户不能"回头"的登录观点,但追溯到以前的ViewController前登录代替.
我们考虑过ViewController A在ViewController B加载时从堆栈中删除它,但是有更好的方法吗?
在我们设置的Android版本的应用程序history=no(如果我没记错),然后它的工作原理.
是否有类似的方法在MonoTouch和MvvmCross中实现这一目标?
我正在使用Xamarin.Android并编写以下代码:
public TextView text;
text = FindViewById<TextView>(Resource.Id.viewIP);
foreach (IPAddress adress in Dns.GetHostAddresses(Dns.GetHostName()))
{
text.Text = "IP Adress: " + adress;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我打开应用程序时,它会立即关闭.我使用正确的方法来获取设备的IP地址吗?
我是C#(几周)和Xamarin(大约一周)的新手.
我能够从教程"在Android上的ListView中显示实体集合"(//来自http://diptimayapatra.wordpress.com/2013/07/08/xamarin-display-entity-collection-in-listview)实现ListView适配器-in-android /)
我现在的问题是我不知道如何处理TextView文本上的click事件.
我的适配器的GetView代码是:
public override View GetView(int position, View convertView, ViewGroup parent)
{
var incident = incidents[position];
View view = convertView;
if(view == null)
{
view = context.LayoutInflater.Inflate(
Resource.Layout.ListViewTemplate, null);
}
view.FindViewById<TextView>(Resource.Id.tvIncident).Text =
string.Format("{0}", incident.title);
view.FindViewById<TextView>(Resource.Id.tvIncidentDescription).Text =
string.Format("{0}", incident.description);
return view;
}
Run Code Online (Sandbox Code Playgroud)
我的事件对象代码是:
public class Incident
{
public int id {get; set;}
public string title {get; set;}
public string description {get; set;}
public double latitude {get; set;}
public double longitude {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
然后活动中的代码是 …