Xamarin.android如何获取控件名称

时间:2017-09-07 02:22:02

标签: c# xamarin.android

我已将控件(TextView)添加到主Activity中的布局中。我想得到原来的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:text="@string/currentLenguajeLabel"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/TextViewCurrentLenguajeLabel" />
</LinearLayout>

然后在代码中我得到这样的控件:

TextView myControl = FindViewById<TextView>(Resource.Id.TextViewCurrentLenguajeLabel);

如何获取控件的名称( TextViewCurrentLenguajeLabel )?

我需要它将它发送到翻译功能

我知道这就是名字,但我需要将名称发送给方法。我想避免做这样的事情

myControl.Text = localizationMethod(“TextViewCurrentLenguajeLabel”);

我想做这样的事情

myControl.Text = localizationMethod(myControl.GetControlName());

2 个答案:

答案 0 :(得分:1)

方法Android.Content.Res.Resources.GetResourceName可以帮助您完成此操作。您可以定义以下扩展方法

public static class ViewExtensions
{
    public static string GetControlName(this View view)
    {
        string controlName = "";
        if (view.Id > 0)
        {
            string fullResourceName = Application.Context.Resources.GetResourceName(view.Id)
            controlName = fullResourceName.Split('/')[1];
        }
        return controlName;
    }
}

并像这样使用

var controlName = myControl.GetControlName();

答案 1 :(得分:0)

要执行此操作,请尝试以下操作:

void localizationMethod(TextView tv)
{
  tv.Text = "Some New Text";
}

然后使用它,通过正常的

获取TextView
TextView myControl = FindViewById<TextView>(Resource.Id.TextViewCurrentLenguajeLabel);

然后拨打localizationMethod(myControl);

这将赋予对控件的localizationMethod访问权限,然后您可以根据需要在方法中使用它。